java科學計數(shù)法

1 科學計數(shù)法的概念

1.1 有效數(shù)字

在一個近似數(shù)中,從左邊第一個不是0的數(shù)字起,到精確到的位數(shù)止,這中間的所有數(shù)字都叫做這個近似數(shù)的有效數(shù)字

例如:

890314000保留三位有效數(shù)字為8.90×10的8次方 (四舍)

839960000保留三位有效數(shù)字為8.40×10的8次方 (五入)

0.00934593保留三位有效數(shù)字為9.35×10的-3次方

1.2 E記號

大多數(shù)計算器及計算機程序用科學記數(shù)法顯示非常大和非常小的結果。因為指數(shù)上標(例如1011)在屏幕上顯示不方便,字母E或e通常是用來代表的十次冪(寫作“×10b”),E或e之后的數(shù)字是它的指數(shù);換句話說,任何兩實數(shù)a和b(b應為整數(shù)),“aEb”所表示的值是a × 10b。注意,這種用法中字母e不是數(shù)學常數(shù)e,也不是指數(shù)函數(shù)exp()(采用用大寫字母E顯示可以更大程度地避免誤解);盡管它也表示指數(shù),但這個符號通常被稱為(科學計數(shù)法)E或e符號,而不是指數(shù)中的底數(shù)符號(盡管后者也會出現(xiàn))。在正式的出版物中盡量不要使用這種顯示方法。

注意科學記數(shù)法中的e或E與數(shù)學常數(shù)e或函數(shù)exp沒有關系。

這種寫法是因為一些計算機程序中不方便寫上標而產(chǎn)生的,在正式出版物中不應當使用這種寫法。

我國國家標準中科學計數(shù)法均用a ×10b的形式表示,而不是aEb(參見GB3101-1993,GBT15835-2011,GBT8170-2008)。

2 Java中的科學計數(shù)法

在Java中,當Double的取值符合某條件時,將會以科學計數(shù)法的方式顯示(下面是個人測試的結果,非從文檔中得到的結論):

@Test

publicvoidtestPrintScientificNotation(){

//整數(shù)部分位數(shù)大于等于8時開始以科學計數(shù)法顯示

System.out.println(-12345678.0);

System.out.println(12345678.0);

//整數(shù)位為0,當小數(shù)位以0開始連續(xù)出現(xiàn)大于等于3時開始以科學計數(shù)法顯示

System.out.println(0.0001);

System.out.println(-0.0001);

}

結果

-1.2345678E7

1.2345678E7

1.0E-4

-1.0E-4

很多時候,我們需要做一個統(tǒng)一,要么全部以科學計數(shù)法輸出,要么就全部顯示為普通計數(shù)。

根據(jù)網(wǎng)上的資料,主要提及NumberFormat、DecimalFormat、BigDecimal這三種API實現(xiàn)方式。

2.1 NumberFormat

NumberFormat 是所有數(shù)值格式的抽象基類。

publicstaticStringscientificNotation2String(Doubled,intnewValue){

Stringvalue=null;

NumberFormatnf=NumberFormat.getInstance();

// 設置此格式中不使用分組

nf.setGroupingUsed(false);

// 設置數(shù)的小數(shù)部分所允許的最大位數(shù)。

nf.setMaximumFractionDigits(newValue);

value=nf.format(d);

returnvalue;

}

如果輸入的小數(shù)位數(shù),大于設定的最大的小數(shù)位數(shù),則會進行四舍五入。

2.2 DecimalFormat

DecimalFormat 是 NumberFormat 的一個具體子類,用于格式化十進制數(shù)字。該類設計有各種功能,使其能夠解析和格式化任意語言環(huán)境中的數(shù),包括對西方語言、阿拉伯語和印度語數(shù)字的支持。它還支持不同類型的數(shù),包括整數(shù) (123)、定點數(shù) (123.4)、科學記數(shù)法表示的數(shù) (1.23E4)、百分數(shù) (12%) 和金額 ($123)。所有這些內(nèi)容都可以本地化。

publicstaticStringscientificNotation2String(Doubled){

Stringvalue=null;

DecimalFormatdecimalFormat=newDecimalFormat("0.00");//格式化設置

value=decimalFormat.format(d);

returnvalue;

}

需要設置模版,指定小數(shù)保留的位數(shù),傳入數(shù)值小數(shù)位數(shù)超出指定位數(shù),則會進行四舍五入;傳入數(shù)值小數(shù)位不足指定位數(shù),則可以設置補零。

需要將數(shù)值轉換為科學計數(shù)法只須將模版修改即可,例如將模版修改為:0.##E0

2.3 BigDecimal

BigDecimal是不可變的、任意精度的有符號十進制數(shù)。

publicstaticStringscientificNotation2String(Stringstr){

Stringvalue=null;

BigDecimalbd=newBigDecimal(str);

value=bd.toPlainString();

returnvalue;

}

BigDecimal的構造方法很多,不一定是要傳入String類型的值。

BigDecimal中的toString方法和toPlanString方法的區(qū)別:

toString():返回此BigDecimal的字符串表示形式,如果需要指數(shù),則使用科學計數(shù)法

toPlainString():返回不帶指數(shù)字段的此BigDecimal的字符傳表示形式

歡迎加入技術QQ群:364595326

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容