gpt4 book ai didi

java - double 值和浮点值比较

转载 作者:行者123 更新时间:2023-12-01 06:28:31 24 4
gpt4 key购买 nike

我刚刚遇到了一个错误,其中比较了两个数字,我发现以下有趣的内容:

    assert 1 == 1;//true        
assert 1d == 1;//true
assert 1 == 1f;//true
assert 1d == 1f;//true
assert 1.1 == 1.1;//true
assert 1.1d == 1.1;//true
assert 1.1 == 1.1f;//false
assert 1.1d == 1.1f;//false

我的问题是:为什么只有最后两个陈述是错误的?

最佳答案

这是因为四舍五入。

1 可以精确地表示为 double 型或浮点型,因此前 4 次比较按预期进行。

1.1 == 1.1 将 double 与自身进行比较并按预期工作。

1.1d == 1.1 与上面完全相同(d 隐含在 1.1 中)。

最后两个比较将 1.1 double 型与 1.1 浮点型进行比较。除了 1.1 不能完全表示为浮点(或 double ),因此它会四舍五入到最接近的浮点(或 double ) - 但 double 具有“更高分辨率”,因此它们不会得到类似地四舍五入。

要查看确切的值:

System.out.println(new BigDecimal(1.1f)); //1.10000002384185791015625
System.out.println(new BigDecimal(1.1d)); //1.100000000000000088817841970012523233890533447265625
<小时/>

正如 @yshavit 在评论中所建议的,当您将 double 与 float 进行比较时, float 会转换为 double ( due to numeric promotion ),因此您实际上是在比较两个 double :

System.out.println(new BigDecimal((double) 1.1f)); //1.10000002384185791015625
System.out.println(new BigDecimal(1.1d)); //1.100000000000000088817841970012523233890533447265625

关于java - double 值和浮点值比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34907189/

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