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個雙打
請解釋?
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個雙打
請解釋?
2/3 = 0
因爲他們沒有顯式強制轉換他們是整數。整個表達式變爲:double x=0*3.14*1.02;
,其爲0。
因爲兩者2及3的數據類型是int和INT/INT給你詮釋而你的情況2/3爲0 嘗試使用2.0/3或2 /3.0你會得到所需的答案。
後綴以「d」每一個數字,以確保你正在處理雙打
(2/3) is 0.
因爲兩者都是整數。爲了解決這個問題,使用強制或者說清楚,你的號碼是不是整數:
double x=(2/3d)*3.14*1.02;
現在你有一個雙,從而導致雙除以整數。
一些更可瞭解有關這一點: http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.html
(2/3)
計算第一(因爲括號),和在整數運算(自號文字是int
類型)。小數部分被丟棄。
因此它是一個值爲0的int
類型。因此整個表達式爲零。
明顯的補救措施是刪除括號並寫入2.0/3.0。有些人喜歡明確演員,但我覺得這很醜陋。
你不熟悉這個笑話嗎?你有6個程序員和5片蛋糕。每個程序員得到多少蛋糕? 0,當然。 – Neil