作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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 的 float 。因此使用 BigDecimal 类。有问题我无法得到确切的结果,这就是我想要的10,而不是得到 10.0000000000000005
最佳答案
我相信您的问题可能就在这里
double c = a/b;
...
BigDecimal bigDecimal1 = BigDecimal.valueOf(c);
您期望 double 可以完美代表 10/3,但我怀疑它可以
也许尝试这样的方法,它总是将数字表示为 BigDecimal
new BigDecimal("10").divide(new BigDecimal("3"))
此时您会注意到 10/3 不能表示为小数
非终止十进制扩展;没有精确可表示的十进制结果
您需要决定需要多少精度,然后使用舍入
new BigDecimal("10")
.setScale(10)
.divide(new BigDecimal("3"), BigDecimal.ROUND_HALF_EVEN)
或者您可以按照 Patricia 的建议使用有理数库。也许看到Is there a commonly used rational numbers library in Java?
关于java - 如何从 10.0/3*3 BigDecimal 和 double 得到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46663943/
我是一名优秀的程序员,十分优秀!