gpt4 book ai didi

java双重计算

转载 作者:行者123 更新时间:2023-11-30 06:27:49 26 4
gpt4 key购买 nike

我知道计算机不能精确地表示非整数。例如,当我在 Java 中添加 2 个 double 时:

724.64d + 1000d

控制台打印出1724.6399999999999

但为什么 724.64d + 100d724.64d + 10000d

控制台分别打印出824.64和10724.64?

有没有办法知道在什么情况下,当我将 2 个 double 相加时,总和就是确切的数字?

之所以这么问,是因为我们的老程序是用double来计算的。并使用双重比较来验证数字。例如:假设总计为 1849.64,所有输入金额加起来必须等于总计 1849.64

input 1: 724.64
input 2: 1125

将不起作用,因为总和将为 1849.6399999999999

但是如果我们像下面这样输入就可以了,总和是1849.64

input 1: 24.64
input 2: 1825

那么如何找到有效的组合呢?请注意,我无权访问这个特定的非常古老的程序。当验证失败时,我们必须像第二个输入组合一样手动寻找走动。谢谢。

最佳答案

BigDecimal bigDecimal = new BigDecimal(724.64);
bigDecimal = bigDecimal.add(new BigDecimal(1000.0));
System.out.println(bigDecimal.floatValue());<--Works fine
System.out.println(bigDecimal.doubleValue());<--Works as mentioned in Question

输出:

1724.64
1724.6399999999999

在第一种情况下它起作用是因为 narrowing primitive conversion 发生了。但是对于 float ,您将不得不接受并接受它。

正如我所说的它对基元有效的原因

double d = 724.64;
double d1 = 1000.0;
System.out.println(d + d1);
System.out.println((float) (d + d1));

输出:

1724.64
1724.6399999999999

关于java双重计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13093982/

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