首頁  >  文章  >  Java  >  Java科學計數法詳細說明

Java科學計數法詳細說明

高洛峰
高洛峰原創
2017-03-19 11:26:114123瀏覽

Java 科學計數法

1 科學計數法的概念

1.1 有效數字

在一個近似數中,從左邊第一個不是0的數字起,到精確到的位數止,這中間的所有數字都叫做這個近似數的有效數字
例如:
890314000保留三位有效數字為8.90×10的8次方(四捨)
839960000保留三位有效數字為8.40×10的8次方(五入)
0.00934593保留三位有效數字為9.35×10的-3次方

#1.2 E記號

#大多數計算器及電腦程式用科學記數法顯示非常大和非常小的結果。因為指數上標(例如1011)在螢幕上顯示不方便,字母E或e通常是用來代表的十次方(寫作“×10b”),E或e之後的數字是它的指數;換句話說,任何兩實數a和b(b應為整數),「aEb」所表示的值是a × 10b。注意,這種用法中字母e不是數學常數e,也不是指數函數exp()(採用用大寫字母E顯示可以更大程度地避免誤解);儘管它也表示指數,但這個符號通常被稱為(科學計數法)E或e符號,而不是指數中的底數符號(儘管後者也會出現)。在正式的出版物中盡量不要使用這種顯示方法。
注意科學記數法中的e或E與數學常數e或函數exp沒有關係。
這種寫法是因為一些電腦程式中不方便寫上標而產生的,在正式出版物中不應當使用這種寫法。
我國國家標準中科學計數法均以a ×10b的形式表示,而非aEb(參見GB3101-1993,GBT15835-2011,GBT8170-2008)。


2 Java中的科學計數法

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

@Test
publicvoid testPrintScientificNotation(){
//整数部分位数大于等于8时开始以科学计数法显示
System.out.println(-12345678.0);
System.out.println(12345678.0);
//整数位为0,当小数位以0开始连续出现大于等于3时开始以科学计数法显示
System.out.println(0.0001);
System.out.println(-0.0001);
}

結果

  1. <span class="pun">#-</span><span class="lit">1.2345678E7</span>

  2. <span class="lit">1.2345678E7</span>

  3. <span class="lit">#1.0E- 4</span>

  4. <span class="pun">-</span><span class="lit">1.0E-4</span>

##很多時候,我們需要做一個統一,要麼全部以科學計數法輸出,要麼就全部顯示為普通計數。

根據網路上的資料,主要提及NumberFormat、DecimalFormat、BigDecimal這三種
API實作方式。

2.1 NumberFormat

NumberFormat 是所有數值格式的抽象基底類別。

publicstaticString scientificNotation2String(Double d,int newValue){
String value =null;
NumberFormat nf =NumberFormat.getInstance();
// 设置此格式中不使用分组
   nf.setGroupingUsed(false);
// 设置数的小数部分所允许的最大位数。
   nf.setMaximumFractionDigits(newValue);
   value = nf.format(d);
return value;
}

如果輸入的小數位數,大於設定的最大的小數位數,則會進行四捨五入。

2.2 DecimalFormat

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

publicstaticString scientificNotation2String(Double d){
String value =null;
DecimalFormat decimalFormat =newDecimalFormat("0.00");//格式化设置  
       value = decimalFormat.format(d);
return value;
}

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


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

2.3 BigDecimal

# BigDecimal是不可變的、任意精確度的符號十進制數。

publicstaticString scientificNotation2String(String str){
String value =null;
BigDecimal bd =newBigDecimal(str);
       value = bd.toPlainString();
return value;
}

BigDecimal的

建構方法很多,不一定要傳入String類型的值。 BigDecimal中的toString方法和toPlanString方法的區別:

以上是Java科學計數法詳細說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn