首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从10.0/3*3 BigDecimal获得双倍?

如何从10.0/3*3 BigDecimal获得双倍?
EN

Stack Overflow用户
提问于 2017-10-10 10:02:14
回答 1查看 309关注 0票数 0
代码语言:javascript
运行
复制
double a = 10.0;
double b =3; 
double c = a/b;
System.out.println(c*b);//answer = 10.0

BigDecimal bigDecimal1 = BigDecimal.valueOf(c);
BigDecimal bigDecimal2 = new BigDecimal("3");
System.out.println(bigDecimal1.multiply(bigDecimal2));//answer = 10.0000000000000005

我试着做一个计算器,但是10/3*3有一个问题,我不想只计算10/3*3这个公式,我想返回这个公式加上浮点数的0.2323232323232。所以使用BigDecimal类。它有问题,我无法得到确切的结果,这是我想要的10,而不是得到10.0000000000000005

EN

Stack Overflow用户

回答已采纳

发布于 2017-10-10 10:20:33

我相信你的问题可能在这里

代码语言:javascript
运行
复制
double c = a/b;
...
BigDecimal bigDecimal1 = BigDecimal.valueOf(c);

你在期待双倍可以完美地表示10/3,我怀疑它能

也许可以尝试这样的方法,它总是将数字表示为BigDecimal

代码语言:javascript
运行
复制
new BigDecimal("10").divide(new BigDecimal("3"))

这时,您会注意到10/3不能表示为十进制

Non-terminating decimal expansion; no exact representable decimal result

您需要决定需要多少精度,然后使用四舍五入。

代码语言:javascript
运行
复制
new BigDecimal("10")
    .setScale(10)
    .divide(new BigDecimal("3"), BigDecimal.ROUND_HALF_EVEN)

或者像Patricia所建议的那样,您可以使用一个有理数库。也许见Is there a commonly used rational numbers library in Java?

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46663943

复制
相关文章

相似问题

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