[英]C# - Using NumberFormatInfo with Convert.ToDouble to return double
[英]Why returns C# Convert.ToDouble(5/100) 0.0 and not 0.05
double variable = 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.)為什么它表現得像這樣?
請注意,整數是整數,整數類型的變量只能存儲整數 ,不能存儲或識別十進制數。 當你說5/100時,5和100都是計算機的整數文字,它被稱為整數除法 。 結果應該是0.05,但由於這是一個整數除法,結果也將是整數 ,正如我所說的整數不能存儲小數點值, 后面的部分是“。”。 (小數點)被完全忽略,因此結果為0 。
添加更多內容,雖然您將結果轉換為double,但它沒有任何區別,因為在它實際轉換為double之前,結果已經為0並且恰好將整數0轉換為double,最終導致0.0 。
2.)如何獲得所需的輸出?
其他答案很好地解釋了解決方案,所以我請求您參考這些答案,而不是為您重新發明輪子。
希望這可以幫助。
因為整數除法中的5/100是0.你需要確保你在雙打上進行除法。
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;
雙變量= 5D / 100D;
所以這將是我修改后的“考慮”答案......
因為我們不知道變量的“類型”是作為分子到達的,所以我們必須使用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
}
現在躲在桌子底下 - 以防萬一我忽略了其他明顯的東西!! :)
吉姆
馬可,
試試這個:
double variable = Convert.ToDouble((double)5/100);
吉姆
[后期編輯] - 正如所指出的(由沉默的選民:) :)轉換的使用是多余的。 顯然應該以類似於其他條目的方式完成。 我承認這一點,但請將其留在上面作為一個例子,說明如何在匆忙回答問題時迅速投票...請謹慎對待您的主人!
另外,由於我們不知道變量是來自字符串還是數字,所以在進行算術運算之前,他還應該在第1個數字上考慮tryparse等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.