为什么 Java BigDecimal 返回 1E+1?
-
06-09-2019 - |
题
为什么此代码有时会返回 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
其他提示
这是当你结果传递到.toString()
正在发生隐式System.out.println()
转换。
这基本上是因为你没有足够的显著数字。如果你乘的东西,只有1位显著100,那么你只有1显著位的东西。如果显示“10”,那么,基本上说,它有2个显著数字。的方式来显示它只有1位显著是显示“1×10 ^ 1”。
下面的两个小数具有相同的值(10),但不同的“尺度”(其中它们开始计数显著数字;顶部具有2个SIG无花果,底部具有:1):
System.out.println(new BigDecimal(BigInteger.TEN, 0)); // prints 10
System.out.println(new BigDecimal(BigInteger.ONE, -1)); // prints 1E+1
不隶属于 StackOverflow