IBM 8中的BigDecimal在使用MathContext.DECIMAL64添加浮动十进制数时计算不正确的值。下面是示例代码
MathContext context = MathContext.DECIMAL64;
BigDecimal p = BigDecimal.valueOf(0.05000);
BigDecimal test = p.divide(BigDecimal.valueOf(12), context);
System.out.println(test.add(BigDecimal.ONE, context));上面的代码输出为1.000000000000000而不是1.004166666666666667。
但是,在上面最后一行代码中,如果删除MathContext,它将返回正确的值为1.004166666666666667。
注意:当使用相同的JVM调试上述代码时,在调试模式下,值也是1.004166666666666667。
问:为什么它会导致JVM返回不同的值,包括/不使用MathContext或调试模式?
使用IBMJDK1.6、1.8和Oracle JDK1.8进行测试。只有在IBMJDK1.8中才经历过这个问题
下面的IBM 1.8有这个问题
java版本" 1.8.0“Java(TM) SE运行时环境(build pwa6480sr3-20160428_01(SR3)) J9 VM (Build2.8,JRE 1.8.0 Windows 7 AOT 64-64压缩引用20160427_301573 (JIT禁用,AOT禁用) J9VM - R28_Java8_SR3_20160427_1620_B301573 GC - R28_Java8_SR3_20160427_1620_B301573_CMPRSS J9CL - 20160427_301573)基于Oraclejdk8u91-b14的jcl-20160421_01
发布于 2018-08-08 03:38:17
我试着使用MathContext.DECIMAL128。我看到代码工作得很好。试着用它。我想我们有问题了,因为BigDecimal数据的位大小。
注意:如果MathContext从20到上运行良好.
https://stackoverflow.com/questions/51732602
复制相似问题