Java 将int转换为float和back';不要给出初始值
当我们将浮点值转换为int时,此代码打印Java 将int转换为float和back';不要给出初始值,java,Java,当我们将浮点值转换为int时,此代码打印-46 这是因为在从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 使用float和double时,如何知道精度损失 在测试代码之前分析代码时,我们如何知道结果?浮点表示与整数表示有很大不同
-46
这是因为在从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
使用float和double时,如何知道精度损失
在测试代码之前分析代码时,我们如何知道结果?浮点表示与整数表示有很大不同 浮点表示法使用符号、指数和尾数,浮点表示法具有
- 符号(1位)
- 指数(8位)
- 尾数(23位)
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
及
此值的二进制整数表示为:
- 1\u 073\u 741\u 888:10000000000000000000000000001000000
- 1\u 073\u 742\u 016:1000000000000000000000011000000
Math.ulp()
了解预期的错误(例如Math.ulp((float)1_234_567_890)=128.0
),否则您必须了解IEEE-754标准
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