簡體   English   中英

為什么返回C#Convert.ToDouble(5/100)0.0而不是0.05

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM