-46当我们将浮点数转换为int时,此代码会打印出来,
这是因为在从int类型到float类型的转换过程中,信息丢失了。
int i = 1_234_567_890;
float f = i;
System.out.println(i - (int)f); //print -46
System.out.println(i - f); //print 0.0
Run Code Online (Sandbox Code Playgroud)
在使用float和double时如何知道精度损失?
在测试之前分析代码时如何知道结果?
浮点表示与整数表示有很大不同。
浮点表示使用符号、指数和尾数,并且 float 有
这样,float可以表示的最大值为:340,282,346,638,528,860,000,000,000,000,000,000,000.000000
long 可以表示的最大值为 9,223,372,036,854,775,807
int 可以表示的最大值为:2,147,483,647
因此,在从浮点型到长整型或整数的转换过程中,丢失的信息可能有多个数量级。
在整数到浮点转换期间,您最多可能会丢失 64u。细节,取决于价值。例如:
int i = 1_073_741_888;
float f = i;
System.out.println(i - (int)f); //print 64
System.out.println(i - f); //print 0.0
Run Code Online (Sandbox Code Playgroud)
和
int i = 1_073_742_016;
float f = i;
System.out.println(i - (int)f); //print -64
System.out.println(i - f); //print 0.0
Run Code Online (Sandbox Code Playgroud)
该值的二进制整数表示形式为:
当值大于 16777216(2^24,因为浮点尾数大小为 -23 位)时,最低有效位将被舍入。