gpt4 book ai didi

java - 为什么转换为 float 在 java 中产生正确的结果?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:09:38 25 4
gpt4 key购买 nike

System.out.println(2.00-1.10)

System.out.println((double)(2.00-1.10)) 

两者输出相同的结果0.8999999999999999,但是

System.out.println((float)(2.00-1.10)) 

输出0.9

也许默认情况下 Java 以 double 执行计算,那么为什么向下转换会更正结果?

如果 1.1 以 double 形式转换为 1.100000000000001 那么为什么会这样

System.out.println((double)(1.10)) 仅输出 1.1

编辑:要了解发生这种情况的原因,我们需要了解这两个答案。首先,规范表示在较低级别实际上是不同的。接下来,toString 的返回值如何更改/四舍五入/与最接近的双参数相匹配。

最佳答案

0.9 不能表示为 double 或 float 。浮点计算的内部细节已经在SO上的各个帖子中得到了解答,例如:Is floating point math broken? .

在您的具体示例中,您可以使用以下代码看到最接近 0.9 的 double 和 float:

System.out.println(new BigDecimal(0.9d));
System.out.println(new BigDecimal(0.9f));

输出 0.9 的规范 double 和浮点表示:

0.90000000000000002220446049250313080847263336181640625
0.89999997615814208984375

现在当您计算 2.0 - 1.1 时,结果是:

System.out.println(new BigDecimal(2.0-1.1));

0.899999999999999911182158029987476766109466552734375

您可以看到它不是 0.9 的规范表示,因此您会得到不同的结果。

但是 float 的精度不是很好并且:

System.out.println(new BigDecimal((float) (2.0-1.1)));

0.89999997615814208984375

返回与 0.9f 的规范表示相同的数字。

关于java - 为什么转换为 float 在 java 中产生正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44265299/

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