gpt4 book ai didi

java - 如何从 10.0/3*3 BigDecimal 和 double 得到?

转载 作者:行者123 更新时间:2023-12-02 12:09:22 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com