我在Java中自學成才的初學者,在同一方程解釋「積累的舍入誤差」雙值
例如使用時無法理解整數和雙打,
int x;
double x;
i = 5;
x = i/2 + 1.0; // (answer 3.0)
z = (int) 1.0 + i/2.0; // (answer 3.5)
什麼是四捨五入?
我在Java中自學成才的初學者,在同一方程解釋「積累的舍入誤差」雙值
例如使用時無法理解整數和雙打,
int x;
double x;
i = 5;
x = i/2 + 1.0; // (answer 3.0)
z = (int) 1.0 + i/2.0; // (answer 3.5)
什麼是四捨五入?
的問題是,這種操作:
i/2
...正在執行整數除法。這就是爲什麼5/2
結果爲2
,而不是2.5
。這是在Java中正常的行爲,執行浮點除法,你必須確保操作數的至少一個是浮點文字:
5/2.0
現在上面會返回2.5
,符合市場預期。或者,您可以選擇其中一個操作數:
((double) i)/2
一個涉及兩個整數的除法將產生一個整數(因此,5/2 = 2)。如果在其中一個操作數中使用雙精度型,則會產生雙精度(因此5/2.0 = 2.5)。其餘的是操作優先。
i/2 = int 2
因爲兩個操作數是整數,並且因此使用整數除法運算(產生整數結果)
i/2.0 = double 2.5
因爲i被第一強制轉換爲加倍(類型另一個操作數)和雙師使用
這是整數和十進制除法之間的情況。
當兩個整數分開時,執行整數除法,即數字被分割並且小數部分被截斷。
當兩個數字中的任何一個數字都是小數(雙/浮點數)時,每隔一個數字將被視爲一個小數,因此給定表達式5/2.0。在任何類型的對象2.0(默認爲double)下,結果都將返回2.5。
給定混合方程如5/2 + 1.0,運算符優先級定義應如何評估表達式。由於除法的優先級高於加法,因此5/2會被視爲整數除法,返回2作爲整數。
然後將其添加到1.0,其中2在評估前被提升爲雙倍數,返回數字3.0作爲最終結果的雙倍數。
除了答案,'z =(int)1.0 + i/2.0'不會做你的想法。它相當於'z =((int)1.0)+ i/2.0',其中'1.0'被轉換爲'1',然後被提升爲'1.0'。 –