我的問題是有關在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中,