double variable = Convert.ToDouble(5/100);
返回0.0,但我預計0.05爲什麼返回C#Convert.ToDouble(5/100)0.0,而不是0.05
可以/我必須改變什麼得到0.05
因爲5本例如是一個變量
double variable = Convert.ToDouble(5/100);
返回0.0,但我預計0.05爲什麼返回C#Convert.ToDouble(5/100)0.0,而不是0.05
可以/我必須改變什麼得到0.05
因爲5本例如是一個變量
5/100
以整數算術完成,在轉換之前產生0 。嘗試
double variable = 5.0/100;
如果5
在可變x
(整數類型),然後使用:
variable = (double)x/100;
或
variable = ((double)x)/100;
使意圖明確的(感謝約翰! )
或
variable = x/100.0;
-1無用的轉換。 – 2010-08-05 11:43:58
我解開我的downvote,因爲你添加了一個正確的例子,但是你仍然有一個糟糕的例子,在已經* double的表達式上使用'Convert.ToDouble'。爲什麼? – 2010-08-05 11:50:01
@Ben:謝謝,修復(我很匆忙,對不起) – 2010-08-05 11:50:05
馬可,
試試這個:
double variable = Convert.ToDouble((double)5/100);
吉姆
[後期編輯] - 正如指出的(由沉默選民:)) Convert的使用是重複的。顯然應該以與其他條目類似的方式完成。我承認,但在上面留下它作爲快速回答問題時迅速得到滿足的示例......請謹慎成爲您的主人!因爲我們不知道變量是來自一個字符串還是一個數字,所以在做算術之前,他還應該在數字1上考慮tryparse等等。
無用的使用'Convert',並且不明顯(鑄造優先於劃分,還是先劃分完成?) – 2010-08-05 11:46:12
Ben - 感謝downvote :-)。我正在回答他的問題,並提供符合HIS預期要求的答案。沒有更多,沒有更多.. – 2010-08-05 11:47:24
所有的1111's - 腿11:0 – 2010-08-05 11:50:01
因爲整數除法中的5/100爲0.您需要確保您正在對雙打進行除法。
雙變量= 5D/100D;
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;
不同於現實世界,計算機處理 數學運算有點 不同,雖然沒有 顯著差異,一旦我們 明白爲什麼它的行爲這樣。
1.)爲什麼它的行爲如此?
請注意,整數是整數,類型的變量只能存儲整數,並且不能存儲或識別十進制數。當你說5/100時,5和100都是計算機的整數文字,它被稱爲整數除法。結果應該是0.05但是,因爲這是一個整數除法,結果也將是整數,正如我所說的整數不能存儲小數點值,在「。」之後的尾部部分爲。 (小數點)被完全忽略,因此結果爲0。
此外,雖然您將結果轉換爲雙倍,但它沒有任何區別,因爲在它實際轉換爲double之前結果已經爲0,並且它恰好將整數0轉換爲double最終結果爲0.0。
2.)如何獲得您想要的輸出?
其他答案很好地解釋瞭解決方案,所以我懇請您參考這些答案,而不是爲您重新設計輪子。
希望這會有所幫助。
所以這裏將是我的修訂後的「考慮」的答案...
,因爲我們不知道變量是什麼「類型」是爲到達分子,我們不得不使用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
我們可以看到你的代碼的更大一部分,對我來說它的工作原理。 – Bobby 2010-08-05 11:43:09