gpt4 book ai didi

Java float 到 long 显式转换

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

我想了解如何 i这段代码最终是 99999904 ?

long i = (long)(99999900f);
System.out.println(i);

我知道 float 是用小数存储的,并不是它们看起来的确切值,但我不明白这如何导致第一个数字是 4 而不是 9 或最终会四舍五入的数字99999900?

最佳答案

I'd like to understand how i in this piece of code ends up being 99999904

99999904 的二进制表示比 99999900 更简单(使用更少的有效数字),并且由于后者需要比可以存储在 float 中更多的有效数字,因此 Java 必须使用最接近的可表示值。

99999900 in hex: 0x5F5E09CWhat 24 significant binary digits look like in hex:                 0x7FFFFF899999904 in hex: 0x5F5E0A0

在两个最接近的可表示值 0x5F5E098 和 0x5F5E0A0 之间,Java 根据 “nearest-even” 选择了后者。规则。这两个可表示的值实际上同样接近,但 0x5F5E0A0 的最后一个有效数字为 0,因此根据此规则进行选择。您可以自己检查 99999899 向下舍入为 0x5F5E098,99999900 向上舍入为 0x5F5E0A0。

float 类型有 24 位有效二进制数字,可以准确表示 0 到 224-1 之间的所有整数。 224 恰好也可以精确表示(它只有一位有效数字),但 224+1 或 16777217 不能精确表示为 float ,并且其上方的整数也不会自动精确地表示为float

关于Java float 到 long 显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518783/

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