將兩個整數除以浮點數
一、概述
在 Java 中,我們可以使用除法運算符 (/) 將左側的值除以右側的值。例如, int number = 10 / 5
。
在這個快速教程中,我們將探討如何從整數除法運算中獲得float
結果。
2. 問題介紹
首先,為簡單起見,我們將在本教程中使用單元測試斷言來驗證計算結果。
我們可能已經意識到,當我們將除法運算符應用於像 a/b 這樣的兩個整數時,它總是返回一個整數,即使 a 不能被**b ,**
**a/b
a
**例如:
int i = 10 / 4;
assertEquals(2, i);
如果我們運行測試,它就會通過。因此, 10 / 4
產生 2 而不是2.5
。而且,即使我們將計算結果賦給一個float
型變量,結果仍然是兩個:
float x = 10 / 4;
assertEquals(2, x);
那麼接下來,讓我們先了解一下為什麼會出現這種情況,然後再弄清楚如何得到想要的float
結果,例如本例中的 2.5。
3. 為什麼Java中兩個整數相除總是一個整數?
要了解為什麼 Java 中 10 / 4 = 2,我們需要查看 JLS(Java 語言規範)中的除法運算符部分,以了解除法運算符的行為是如何定義的。
首先,規範規定整數除法向零舍入。換句話說,兩個整數的除法運算的結果只是商值。其餘不包括在內。
因此,當我們計算10 / 4
時,我們得到 2 而不是 2.5。
接下來,讓我們看看如果兩個整數不可整除,如何得到預期的float
結果。
4. 如何使兩個整數相除產生浮點數?
現在,我們已經了解了除法運算符如何處理兩個整數。 JLS 還在二進制數字提升中定義了原始操作數轉換規則。
對*
、 /
和%
運算符執行二進制數字提升。因此,除法運算遵循操作數轉換規則。
那麼接下來,讓我們仔細看看操作數轉換規則。
根據 JLS,當我們計算a/b
時:
- 如果任一操作數是
double,
則另一個操作數將轉換為double.
- 否則,如果任一操作數的類型為
float,
則另一個將轉換為float.
- 否則,如果任一操作數是
long,
則另一個將轉換為long.
- 否則,兩個操作數都轉換為
int.
根據上面的規則,如果我們想讓a/b
操作的結果是一個float
,至少有一個操作數應該是float.
那麼,接下來,讓我們看看當我們將一個操作數轉換為float
時,是否能得到預期的結果:
float x = (float) 10 / 4;
assertEquals(2.5, x);
float y = 10 / (float) 8;
assertEquals(1.25, y);
如果我們試一試,上面的測試就通過了。因此,將任何操作數轉換為float
會使除法產生float
結果。
5. 結論
在這篇快速文章中,我們討論了為什麼整數的除法在 Java 中總是產生整數。
此外,我們還討論瞭如何從整數除法中獲得預期的float
結果。這對於不可分割的情況特別有用。
像往常一樣,文章中提供的所有代碼片段都可以在 GitHub 上找到。