2012-02-01 35 views
2
int velMperMin = 667; 
int distM = 70; 
double movT = (distM/velMperMin)*60; 

movtT的商獲得雙重價值必須等於6.30,但它是0從整數

回答

6

您需要將分區的其中一個操作數轉換爲雙精度值。就像這樣:

double movT = ((double)distM/velMperMin)*60; 

你的代碼執行整數除法distM/velMperMin和結果0。然後你乘以60.仍然0。然後你轉換爲雙倍,現在它是0.0

將其中一個操作數轉換爲double可確保該部門將成爲浮點部門而不是整數部門,並將產生您期望的結果。

+0

或者他只是可以將它們定義爲double。 – 2012-02-01 12:03:12

+1

@Vash也許,但有時你可能有潛在的變量,這些變量自然是整數,但你隨後想要用它們執行浮點算術。 – 2012-02-01 12:04:13

1

int/int的結果是int(70/667 = 0.xxx,它是0)。你必須將前至少一個int轉換爲double

double movT = ((double) distM/velMperMin)*60; 

或者只是定義變量爲雙之一。

1

由於70/66700 * 60也是0

0

distM和velMperMin都是整數,並且將它們分成0等於0,因爲結果小於1並且將被剪切爲整數。用60乘以零仍然是零。

0

這是正常的:當使用整數70/667爲0時,在使用雙精度時它將導致0,1049。嘗試將velMperMin和distM更改爲雙打。

0

您提到的分區在整數類型上執行的問題。

當你除整數,結果你也將有一個整數。在你的情況下,你將70除以667.這給0和10494 ...休息。所以最終的結果是零是我們沒有地方來存儲小數值。

0

不要進入int分區,否則會得到int結果。

Double velMperMin = new Double(667); 
Double distM = new Double(70); 
Double movT = (distM/velMperMin * 60); 
+0

難道你不是指「雙」而不是「雙」嗎? – 2012-02-01 12:38:37

+0

不是。這是一個錯誤的結論。您可以使用雙精度或雙精度。事情是:不要指望一個int分割的double(或Double)結果,正如其他SO所說的那樣 – Alfabravo 2012-02-01 12:53:00

4

解決這個問題的最簡單方法是首先以double爲多。

double movT = 60.0 * distM/velMperMin;