2016-02-19 76 views
-2
double multiply() 
{ 
double x=(2/3)*3.14*1.02; 
System.out.print(x); 

double y=0.666*3.14*1.02; /*(2/3)=0.666...*/ 
System.out.print(y); 
} 

輸出: X = 0.0 Y = SomeNumber的java:乘以2個雙打

請解釋?

+4

你不熟悉這個笑話嗎?你有6個程序員和5片蛋糕。每個程序員得到多少蛋糕? 0,當然。 – Neil

回答

0

2/3 = 0因爲他們沒有顯式強制轉換他們是整數。整個表達式變爲:double x=0*3.14*1.02; ,其爲0。

0

因爲兩者2及3的數據類型是int和INT/INT給你詮釋而你的情況2/3爲0 嘗試使用2.0/3或2 /3.0你會得到所需的答案。

0

後綴以「d」每一個數字,以確保你正在處理雙打

2
(2/3) is 0. 

因爲兩者都是整數。爲了解決這個問題,使用強制或者說清楚,你的號碼是不是整數:

double x=(2/3d)*3.14*1.02; 

現在你有一個雙,從而導致雙除以整數。

一些更可瞭解有關這一點: http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.html

+1

在這種情況下編寫3f不是一個好主意,因爲2/3f將被評估爲'float',隨着隨後發生對'double'的提升,這會花費精度。 – Bathsheba

+0

謝謝,調整。 –

+1

*更好*更好。有一個upvote。 – Bathsheba

1

(2/3)計算第一(因爲括號),和在整數運算(自號文字是int類型)。小數部分被丟棄。

因此它是一個值爲0的int類型。因此整個表達式爲零。

明顯的補救措施是刪除括號並寫入2.0/3.0。有些人喜歡明確演員,但我覺得這很醜陋。