[英]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.