为什么Java BigDecimal返回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());

输出:

平原:10000000
科学的:10E + 6