java中的转换
我的问题是关于java中的转换。 我有一个整数1615021049。当除以1(这也是一个浮点数)时,我在浮点数中得到的答案是1.6150206E9,当转换回整数时,得到的结果是1615021056,它不是原来的数字。请帮忙。 如果我将变量m和b转换为double,同样可以正常工作java中的转换,java,Java,我的问题是关于java中的转换。 我有一个整数1615021049。当除以1(这也是一个浮点数)时,我在浮点数中得到的答案是1.6150206E9,当转换回整数时,得到的结果是1615021056,它不是原来的数字。请帮忙。 如果我将变量m和b转换为double,同样可以正常工作 int a=1615021023; float m=1; float b=a/m; int d= (int) b; 问题是float的尾数位数太少,无法准确表示1615021049。后者需要31位,前者只提供23位。
int a=1615021023;
float m=1;
float b=a/m;
int d= (int) b;
问题是
float
的尾数位数太少,无法准确表示1615021049。后者需要31位,前者只提供23位。因此失去了精确性
这不是双精度的问题,因为双精度有52位尾数,足以表示1615021049
请参阅。实数是无限的。浮点中只有32位。所以很明显,并不是每个实数都可以精确地表示为浮点数。浮点表示法使小数字比大数字更精确。
int
有31位(加号)来存储值,而float
只有24位(加指数和符号)
这意味着一些较大的值不能正确表示。如果您使用double,它的值有53位,那么就不会有问题
简而言之,避免使用float,除非你有很好的理由使用它
int i = 1615021023;
int a = (int) (double) i;
int b = (int) (float) i;
System.out.println("double: " + a + ", float: " + b + ", should be " + i);
印刷品
double: 1615021023, float: 1615021056, should be 1615021023
在爪哇