打印浮点值

时间:2013-11-22 19:21:31

标签: java int type-conversion floating-point-conversion

我有这个代码示例:

float approx = 1234567712f;
System.out.println(approx);

不打印“1.234567712E9”或类似内容,而是打印“1.23456768E9”。据我了解,这与二进制级别的精度有关。

浮点数的精度(逗号(“,”)符号前后)有多少二进制数?你能用一个简单的方法解释为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

浮点数由“有效数”和“指数”组成。要将整数表示为最后一个奇数位,指数必须为零。这意味着您有24位可用(第24位始终为1,因此未存储),您可以存储的最大整数是

0xFFFFFF == 16777215

如果要为此数字添加2,“准确”表示将为

0x1000001 = 16777217

您需要25位才能存储此号码;所以最后一个数字被删掉,数字将被存储为

0x800000 x 2^1 == 16777216

随着数字变大,连续可表示数字之间的“跳跃”变得更大。到你的时候

1234567112 == 0x4995FFC8

您需要32位来存储它。但是你只有24位,所以它将被内部存储为类似

的东西
0x499600 x 2^8  (rounded to the closest number).

= 0x49960000    = 1234567168

这是你看过的号码。

答案 1 :(得分:0)

float在逗号前后的精度最高可达7位。这就是为什么1234567是正确的,其他3位数不是。 如果你想用高数字计算

,你应该使用double而不是float