我想了解这段代码中的Access-Control-Allow-Origin: *
最终是99999904?
/icons
我知道浮点数存储的是小数,并不是它们看起来的确切值,但我不知道这是怎么会导致第一个数字是4而不是9或最终会变成圆形的数字高达99999900?
答案 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
。