2010-04-01 106 views
0

我正在做簡單的分裂在C#中,我有點困惑於它的錯綜複雜。這裏有一些代碼,並在評論中,結果。 (順便說一句,我只用1行編譯沒有評論,如果你說我有5點聲明相同的變量)簡單的c#算術。 winForms

double result = 2/3; //gives 0 
double result = Convert.ToDouble(2)/Convert.ToDouble(3); // is good 
double result = double.Parse(2)/double.Parse(3); // gives me errors 
double result = double.Parse(2/3); // gives me errors 
double result = Convert.ToDouble(2/3); // gives 0 

MessageBox.Show(result.ToString()); 

,所以如果你有一大堆的整數,你想惹的,你必須給每個轉換一到兩倍。相當乏味...

回答

3

整數除法其餘部分。你並不需要使用Convert.ToDoubledouble.Parse,可以簡單的寫:

double result = 2.0/3; 

double result = (double)2/3; 

如果操作數的任一方爲浮點值,那麼你得到的浮點運算而不是整數算術。

爲了解釋每一個:

// 2/3 = 0 with a remainder of 2; remainder is discarded 
double result = 2/3; 

// 2.0/3.0 = 0.6667, as expected 
double result = Convert.ToDouble(2)/Convert.ToDouble(3); 

// double.Parse takes a string parameter, so this gives a syntax error 
double result = double.Parse(2)/double.Parse(3); 

// As above, double.Parse takes a string, so syntax error 
// This also does integer arithmetic inside the parentheses, so you would still 
// have zero as the result anyway. 
double result = double.Parse(2/3); // gives me errors 

// Here, the integer division 2/3 is calculated to be 0 (throw away the 
// remainder), and *then* converted to a double, so you still get zero. 
double result = Convert.ToDouble(2/3); 

希望有所幫助解釋它。

+0

ahh thx很多傢伙。我應該知道2/3被截斷,從而給出0 ....我還了解到.parse是用於字符串的。並且,我瞭解到可以鍵入(double)而不是Convert.ToDouble。 thx guys – jello 2010-04-01 03:23:15

+0

@亞當羅賓遜:哎呀,那是一個錯字。它應該說'(double)2'沒有'.0',表示明確的演員。希望我沒有把我自己以外的任何人混淆! – Aaronaught 2010-04-01 03:37:33

2

2/3是劃分兩個整數,它會截斷任何餘數。你可以這樣做:

double result = 2.0/3.0; 

這將執行雙重劃分。

double.Parse被設計成一個string轉換爲double,而不是一個整數(對於您可以直接澆鑄像(double)intVariable或使用Convert.ToDouble(intVariable))。如果您想使用常數,只需將您的數字格式設置爲2.0而不僅僅是2

1

第一行返回0的原因是這是整數除法的標準行爲。許多語言截斷餘數,而C#就是其中之一。

Double.Parse調用失敗的原因是因爲解析通常應用於字符串。解析一個整數值並不合理。只需投入雙倍代替:(double)2