我的问题涉及Java中的转换。 我有一个整数1615021049。当我将它除以1(也是浮点数)时,得到的浮点数答案是1.61502106E9,而将其转换回整数后得到的是1615021056,而不是原始数字。请帮忙解决。 如果将变量m和b转换为double,则可以正常工作。
int a=1615021023;
float m=1;
float b=a/m;
int d= (int) b;
我的问题涉及Java中的转换。 我有一个整数1615021049。当我将它除以1(也是浮点数)时,得到的浮点数答案是1.61502106E9,而将其转换回整数后得到的是1615021056,而不是原始数字。请帮忙解决。 如果将变量m和b转换为double,则可以正常工作。
int a=1615021023;
float m=1;
float b=a/m;
int d= (int) b;
float
的尾数位数过少,无法精确表示1615021049。后者需要31位,而前者只提供23位。因此会出现精度损失。doubles
的问题,因为double
有52位的尾数,足以表示1615021049。实数是无限的,而浮点型只有32位。因此,显然,并不是所有实数都能准确地表示为浮点型。而且,浮点型表示法使得小数字比大数字更加精确。
int
有31位(加上符号)用于存储值,而float
只有24位(加上指数和符号)。
这意味着一些大的值不能被准确表示。如果您使用具有53位值的double,则不会出现问题。
简而言之,除非有非常好的理由要使用它,否则请避免使用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
在Java中,