首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IBM java8 BigDecimal浮动问题与MathContext.DECIMAL64

IBM java8 BigDecimal浮动问题与MathContext.DECIMAL64
EN

Stack Overflow用户
提问于 2018-08-07 17:45:23
回答 1查看 200关注 0票数 1

IBM 8中的BigDecimal在使用MathContext.DECIMAL64添加浮动十进制数时计算不正确的值。下面是示例代码

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 03:38:17

我试着使用MathContext.DECIMAL128。我看到代码工作得很好。试着用它。我想我们有问题了,因为BigDecimal数据的位大小。

注意:如果MathContext从20到上运行良好.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51732602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档