2011-07-26 50 views
-3

可能重複:
Why does (360/24)/60 = 0 … in Java爲什麼我會得到不同的結果,但實際上它們是相同的數字?

浮子答案= 5/2;並浮動答案5.0/2.0;

當我添加小數點我得到2.5這是正確的,但沒有小數我得到2?

+0

http://stackoverflow.com/questions/3553047/wrong-division-in-java http://stackoverflow.com/questions/2475652/why-does-360-24-60-0-in-java http ://stackoverflow.com/questions/3017058/division-problems ...有可能有一百萬以上 – Jacob

回答

4

整數除法與浮點除法不同。在你的第一個例子中,你將兩個整數分開,得到結果2,然後把它分配給一個浮點數。

2

這很簡單。 5/2根據整數除法進行評估(因爲5和2是整數),結果是2(整數除法給出商,即劃分舍入),並將其轉換爲浮點數。 5.0/2.0做一個浮點除法,所以你得到2.5的正確答案。

0

因爲第一個是基於整數的。因爲這個部門,分部四捨五入。然後它變成浮動。

第二個是基於從一開始就漂浮,所以你得到正確的答案。

0

你以整數計算並使用整數算術。計算結果發生在浮點數上。你可以寫

浮動答案=((浮動)5)/((浮動)2)

1

出現這種情況的原因是因爲當你使用5和2,數字被解釋爲整數,這也會導致一個四捨五入的整數,然後將其轉換爲浮點「答案」。當你指定5.0和2.0時,這些被認爲是浮點數,它允許結果也是一個浮點數。

1

從用於數值提升了Java文檔:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#239829

15.17.2除法運算符/

二進制/運算符執行除法,產生其運算數 的商。左邊的操作數是被除數,右邊的操作數是除數。 整數除法向0進行舍入。也就是說, 數值促進(§5.6.2)後面的二進制整數運算數n和d所產生的商是一個整數值q,其大小盡可能大,同時滿足| d ·q || N |;此外,當| n || d |時,q是正數 |並且n和d具有相同的符號,但當q爲負時 | n || d | n和d的符號相反。有一種特殊情況, 不符合此規則:如果被除數是其最大可能量級的負整數,並且除數爲-1,則發生整數溢出並且結果等於被除數。 儘管溢出,在這種情況下不會引發異常。在 另一方面,如果整數除法中的除數的值爲0, ,則拋出ArithmeticException。

5/2的結果是一個整數,然後在賦值期間將該整數轉換爲浮點數。

相關問題