为什么Java BigDecimal会返回1E + 1?

par*_*rkr 26 java floating-point bigdecimal

为什么这个代码有时会返回1E + 1,而对于其他输入(例如17),输出不会以科学计数法打印?

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

dfa*_*dfa 43

使用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());
Run Code Online (Sandbox Code Playgroud)

输出:

plain      : 10000000
scientific : 10E+6


Jor*_*nes 8

.toString()是将结果传递给时发生的隐式转换System.out.println().