2016-04-27 48 views
1

我是一名正在準備參加州學術會議(UIL)的高中學生。我有一個問題,我已經到處尋找,似乎無法找到答案!爲什麼打印出0.0?爲什麼1/2 == 0使用雙精度?

double d = 1/2; 
System.out.println(d); 

回答

8

這是因爲數據類型。

當你做1/2這是整數除法,因爲兩個操作數是整數,因此它解析爲零(0.5舍入爲零)。

如果您將它們中的任何一個轉換爲double,您將得到雙重結果。

double d = 1d/2; 

double d = 1/2.0; 
+1

謝謝你,怎麼這麼傻! –

1

1和2均爲整數,所以1/2 == 0。結果不會被轉換爲double,直到它被分配給變量,但是到時候爲時已晚。如果你想做浮動分割,請執行1.0/2

1

這是因爲12int值,因此按照Java語言規範,對int操作數的算術運算的結果也int。結果的任何非整數部分被丟棄 - 即,小數部分被截斷,0.5 - >0

有從int自動加寬澆鑄到double當該值被分配給d,但石膏上完成結果爲int,這是一個整數0

如果「修復」的問題,使操作數double之一通過添加「d」到數字文字:

double d = 1d/2; 
System.out.println(d); // "0.5" 

按照語言規範,算術運算的操作數的,當一個是double,結果也是double

1

1/2 = 0的原因結果,然後結果是解析加倍。你使用int而不是double。 我認爲它應該是確定:

double d = 1/2.0; 
System.out.println(d); 

對不起,弱英語