int velMperMin = 667;
int distM = 70;
double movT = (distM/velMperMin)*60;
movtT
的商獲得雙重價值必須等於6.30
,但它是0
。從整數
int velMperMin = 667;
int distM = 70;
double movT = (distM/velMperMin)*60;
movtT
的商獲得雙重價值必須等於6.30
,但它是0
。從整數
您需要將分區的其中一個操作數轉換爲雙精度值。就像這樣:
double movT = ((double)distM/velMperMin)*60;
你的代碼執行整數除法distM/velMperMin
和結果0
。然後你乘以60.仍然0
。然後你轉換爲雙倍,現在它是0.0
。
將其中一個操作數轉換爲double
可確保該部門將成爲浮點部門而不是整數部門,並將產生您期望的結果。
int/int
的結果是int
(70/667 = 0.xxx,它是0)。你必須將前至少一個int
轉換爲double
:
double movT = ((double) distM/velMperMin)*60;
或者只是定義變量爲雙之一。
由於70/667
是0
,0 * 60
也是0
。
distM和velMperMin都是整數,並且將它們分成0等於0,因爲結果小於1並且將被剪切爲整數。用60乘以零仍然是零。
這是正常的:當使用整數70/667爲0時,在使用雙精度時它將導致0,1049。嘗試將velMperMin和distM更改爲雙打。
您提到的分區在整數類型上執行的問題。
當你除整數,結果你也將有一個整數。在你的情況下,你將70除以667.這給0和10494 ...休息。所以最終的結果是零是我們沒有地方來存儲小數值。
不要進入int分區,否則會得到int結果。
Double velMperMin = new Double(667);
Double distM = new Double(70);
Double movT = (distM/velMperMin * 60);
難道你不是指「雙」而不是「雙」嗎? – 2012-02-01 12:38:37
不是。這是一個錯誤的結論。您可以使用雙精度或雙精度。事情是:不要指望一個int分割的double(或Double)結果,正如其他SO所說的那樣 – Alfabravo 2012-02-01 12:53:00
解決這個問題的最簡單方法是首先以double
爲多。
double movT = 60.0 * distM/velMperMin;
或者他只是可以將它們定義爲double。 – 2012-02-01 12:03:12
@Vash也許,但有時你可能有潛在的變量,這些變量自然是整數,但你隨後想要用它們執行浮點算術。 – 2012-02-01 12:04:13