2010-08-05 39 views

回答

18

5/100以整數算術完成,在轉換之前產生0 。嘗試

double variable = 5.0/100; 

如果5在可變x(整數類型),然後使用:

variable = (double)x/100; 

variable = ((double)x)/100; 

使意圖明確的(感謝約翰! )

variable = x/100.0; 
+3

-1無用的轉換。 – 2010-08-05 11:43:58

+2

我解開我的downvote,因爲你添加了一個正確的例子,但是你仍然有一個糟糕的例子,在已經* double的表達式上使用'Convert.ToDouble'。爲什麼? – 2010-08-05 11:50:01

+1

@Ben:謝謝,修復(我很匆忙,對不起) – 2010-08-05 11:50:05

-3

馬可,

試試這個:

double variable = Convert.ToDouble((double)5/100); 

吉姆

[後期編輯] - 正如指出的(由沉默選民:)) Convert的使用是重複的。顯然應該以與其他條目類似的方式完成。我承認,但在上面留下它作爲快速回答問題時迅速得到滿足的示例......請謹慎成爲您的主人!因爲我們不知道變量是來自一個字符串還是一個數字,所以在做算術之前,他還應該在數字1上考慮tryparse等等。

+2

無用的使用'Convert',並且不明顯(鑄造優先於劃分,還是先劃分完成?) – 2010-08-05 11:46:12

+0

Ben - 感謝downvote :-)。我正在回答他的問題,並提供符合HIS預期要求的答案。沒有更多,沒有更多.. – 2010-08-05 11:47:24

+0

所有的1111's - 腿11:0 – 2010-08-05 11:50:01

2

因爲整數除法中的5/100爲0.您需要確保您正在對雙打進行除法。

2

5/100是整數運算。爲了具有雙精度,一個或多個值需要加倍。

double result = 5.0/100.0; 
double result = 5.0/100; 
double result = 5/100.0; 
double result = (double)5/100; 
double result = 5/(double)100; 

double numerator = 5; 
double denominator = 100; 
double result = numerator/denominator; 
4

不同於現實世界,計算機處理 數學運算有點 不同,雖然沒有 顯著差異,一旦我們 明白爲什麼它的行爲這樣。

1.)爲什麼它的行爲如此?

請注意,整數是整數,類型的變量只能存儲整數,並且不能存儲或識別十進制數。當你說5/100時,5和100都是計算機的整數文字,它被稱爲整數除法。結果應該是0.05但是,因爲這是一個整數除法,結果也將是整數,正如我所說的整數不能存儲小數點值,在「。」之後的尾部部分爲。 (小數點)被完全忽略,因此結果爲0

此外,雖然您將結果轉換爲雙倍,但它沒有任何區別,因爲在它實際轉換爲double之前結果已經爲0,並且它恰好將整數0轉換爲double最終結果爲0.0

2.)如何獲得您想要的輸出?

其他答案很好地解釋瞭解決方案,所以我懇請您參考這些答案,而不是爲您重新設計輪子。

希望這會有所幫助。

0

所以這裏將是我的修訂後的「考慮」的答案...

,因爲我們不知道變量是什麼「類型」是爲到達分子,我們不得不使用Double.TryParse上那。在實驗室中,我們可以做飯這樣的事情了:

var numerator = "5"; // let's make it string to prove the point 
double parsedNumerator; 
int denominator = 100; // this could well be a constant 

double result; 
if(Double.TryParse(numerator, out parsedNumerator)) 
{ 
    // notice no casting or convert fluff 
    result = parsedNumerator/denominator; 
    // do something with the result 
} 
else 
{ 
    // warn that the numerator is doo-lallie 
} 

現在躲在桌子底下 - 以防萬一我已經忽略了別的東西明顯! :)

jim

相關問題