Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将int转换为float和back';不要给出初始值_Java - Fatal编程技术网

Java 将int转换为float和back';不要给出初始值

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时,如何知道精度损失 在测试代码之前分析代码时,我们如何知道结果?浮点表示与整数表示有很大不同

当我们将浮点值转换为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时,如何知道精度损失


在测试代码之前分析代码时,我们如何知道结果?

浮点表示与整数表示有很大不同

浮点表示法使用符号、指数和尾数,浮点表示法具有

  • 符号(1位)
  • 指数(8位)
  • 尾数(23位)
这样,float可以表示的最大值是:3402823466385286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

long可以表示的最大值是9223372036854775807

int可以表示的最大值是:2147483647

因此,在从float转换为long或integer的过程中,丢失的信息可能达到多个数量级

在整数到浮点的转换过程中,您可能会丢失多达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

此值的二进制整数表示为:

  • 1\u 073\u 741\u 888:10000000000000000000000000001000000
  • 1\u 073\u 742\u 016:1000000000000000000000011000000
当值大于16777216(2^24,因为浮点的尾数大小为-23位-)时,最低有效位被舍入。

您可以使用
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