簡體   English   中英

為什么Java BigDecimal會返回1E + 1?

[英]Why does Java BigDecimal return 1E+1?

為什么這段代碼有時會返回1E + 1,而對於其他輸入(例如17),輸出不會以科學記數法打印?

BigDecimal bigDecimal = BigDecimal.valueOf(doubleValue).multiply(BigDecimal.valueOf(100d)).stripTrailingZeros();
System.out.println("value: " + bigDecimal);

使用bigDecimal.toPlainString()

 BigDecimal bigDecimal = BigDecimal.valueOf(100000.0)
                     .multiply(BigDecimal.valueOf(100d))
                     .stripTrailingZeros();
 System.out.println("plain      : " + bigDecimal.toPlainString());
 System.out.println("scientific : " + bigDecimal.toEngineeringString());

輸出:

plain      : 10000000
scientific : 10E+6

這是將結果傳遞給System.out.println()時發生的隱式.toString()轉換。

BigDecimal.toString()行為的確切原理在API文檔中解釋了很多(並且幾乎難以理解)的細節。

要獲得一致(和區域設置敏感)文本表示,您應該使用DecimalFormat

這主要是因為您沒有足夠的有效數字。 如果你將只有1個有效數字的東西乘以100,那么你得到的東西只有1個有效數字。 如果它顯示“10”那么基本上它表示它有2位有效數字。 顯示它的方式只有1個有效數字顯示“1 x 10 ^ 1”。

以下兩位小數具有相同的值(10),但不同的“標度”(它們開始計算有效數字;頂部有2個sig figs,底部有1個):

System.out.println(new BigDecimal(BigInteger.TEN, 0));  // prints 10
System.out.println(new BigDecimal(BigInteger.ONE, -1)); // prints 1E+1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM