(new BigDecimal(String.valueOf(131.7d))).multiply(new BigDecimal(String.valueOf(0.95d))).doubleValue() = 125.115 (new BigDecimal( 131.7d )).multiply(new BigDecimal( 0.95d )).doubleValue() = 125.11499999999998
BigDecimal在它们之间有什么不同?
解决方法
How many digits must be printed for the fractional part of m or a?
There must be at least one digit to represent the fractional part,and
beyond that as many,but only as many,more digits as are needed to
uniquely distinguish the argument value from adjacent values of type
double. That is,suppose that x is the exact mathematical value
represented by the decimal representation produced by this method for
a finite nonzero argument d. Then d must be the double value nearest
to x; or if two double values are equally close to x,then d must be
one of them and the least significant bit of the significand of d must
be 0.
结果是String.valueOf(131.7d)将返回字符串“131.7”,即使参数的确切值是131.69999999999998863131622783839702606201171875.原因是十进制分数不能总是使用二进制分数精确表示(与浮点数和双精度数一起使用).
因此,新的BigDecimal(String.valueOf(131.7))将创建一个精确值为131.7的BigDecimal. new BigDecimal(131.7)将创建一个具有精确值131.69999999999998863131622783839702606201171875的BigDecimal.