Java浮动到长显式转换

时间:2016-02-20 03:30:44

标签: java casting floating-point type-conversion floating-accuracy

我想了解这段代码中的Access-Control-Allow-Origin: *最终是99999904?

/icons

我知道浮点数存储的是小数,并不是它们看起来的确切值,但我不知道这是怎么会导致第一个数字是4而不是9或最终会变成圆形的数字高达99999900?

1 个答案:

答案 0 :(得分:1)

  

我想了解我在这段代码中的最终结果是99999904

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

99999900 in hex: 0x5F5E09C
What 24 significant binary digits look like in hex:
                 0x7FFFFF8
99999904 in hex: 0x5F5E0A0

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

对于float类型有24个有效二进制数字,0到2 24 -1之间的所有整数都可以精确表示。 2 24 恰好也可以表示(它只有一个有效数字),但是2 24 +1或16777217,不能完全表示为{{1}并且它上面的整数也不能自动完全表示为float