我的问题是有关在java中的转换。 我有一个整数1615021049.当除以1(这也是一个浮点数)时,浮点数为1.61502106E9,当它转换回整数时,给出1615021056这不是原始数字。请帮助。 如果我将变量m和b转换为双倍,那么同样可以正常工作。java中的转换
int a=1615021023;
float m=1;
float b=a/m;
int d= (int) b;
我的问题是有关在java中的转换。 我有一个整数1615021049.当除以1(这也是一个浮点数)时,浮点数为1.61502106E9,当它转换回整数时,给出1615021056这不是原始数字。请帮助。 如果我将变量m和b转换为双倍,那么同样可以正常工作。java中的转换
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位,你不会有问题。
总之,避免使用浮动除非你是一个很使用它的好理由。
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中,