2010-05-20 352 views
0

C#小數所以我有這樣的代碼:整數運營商

p.Value = 1; 
decimal avg = p.Value * 100/10000; 
string prntout = p.Key + " : " + avg.ToString(); 
Console.WriteLine(prntout); 

但該程序打印出0,而不是0.01。 p.Value是一個int。我如何解決這個問題?

回答

3

更改文字轉換爲十進制的一個:

decimal avg = p.Value * 100m/10000; 

現在,解釋爲什麼這個工程:

在同一時間讓我們處理原始行一個操作,p.Value代1:

decimal avg = 1 * 100/10000; // int multiplication 
decimal avg = 100/10000; // int division, remainder tossed out 
decimal avg = (decimal) 0; // implicit cast 

通過改變100到100M,它現在:

decimal avg = 1 * 100m/10000; // decimal multiplication 
decimal avg = 100m/10000; // decimal division 
decimal avg = 0.01m; 
+0

備註:十進制的文字類型代碼是'm',可能是爲了錢。 – Powerlord 2010-05-20 14:35:34

1

表達式p.Value * 100/10000僅使用整數類型,因此根據integer division規則進行評估。

更改一個(或多個)的參數,以小數的和預期它會執行:

p.Value * 100/10000m 
1

嘗試改變這一點:

decimal avg = p.Value * 100/10000; 

decimal avg = Convert.ToDecimal(p.Value) * 100.0/10000.0; 

你以前的版本使用所有整數。

0

如果P.Value是你可能會失去在這條線的分數整數:

小數平均= p.Value * 100/10000;

所以,你可以這樣做:

十進制平均=(十進制)P.Value * 100/10000;

希望它有幫助。

+0

謝謝大家的答案,它確實工作:) – webyacusa 2010-05-20 14:43:43