为什么这里需要F后缀来避免错误?

时间:2013-09-13 14:03:02

标签: java

float f = 3.4028235E38F;

编译正常,但

float f = 3.4028235E38;

抛出此错误:

 possible loss of precision

在此代码中:

http://ideone.com/0Hu3dA

我原本期望相反,因为浮点文字默认为double,应该更精确。

1 个答案:

答案 0 :(得分:4)

因为浮点数默认为double类型。要使它成为浮点数,请附加F。您在以下作业中收到错误:

float f = 3.4028235E38;

因为double比float更精确。因此,可能会损失精确度。

  

我原本期望相反,因为浮点文字默认为double,应该更精确。

让我们检查你的数字的二进制表示,直到双精度:

0x47EFFFFFE54DAFF8 =    01000111 11101111 11111111 11111111 
                        11100101 01001101 10101111 11111000

现在float是单精度32位浮点值。它不能存储所有双精度值,即双精度64位浮点值。