2010-11-03 69 views
2

我知道如果.NET使用銀行家舍入來舍入2.5到2。但是,這可能如何:Math.Round圓了我

decimal point; 
point =51 * 70/100;  
Math.Round(point,0, MidPointRounding.AwayFromZero); 

rounds to 35?

即使是奇數,我怎樣才能讓所有.5的整數變成大整數?

回答

9

你在做整數除法。試試這個:

decimal point = 51m * 70m/100m; 
10

這段代碼中的第二行已經給出了一個整數結果。

51,70,100類型爲int,因此選擇整數乘法和除法運算符。整數乘法或除法的結果總是再次爲整型,在整數上使用/進行劃分時,可能的小數位將被截斷。

聲明point = 51 * 70/100;相當於

int tmp = 51 * 70;   // result is 3570 
tmp = tmp/100;   // result is 35 (!!!) 
point = (decimal)tmp;  // point is 35m; 

的解決辦法是改變你的代碼,以便它使用decimal算術:

point = 51m * 70m/100m; // point is 35.7m 

其實就足夠了操作數一個是類型爲decimal。這可以通過使用後綴m(用於貨幣)或通過使用類型轉換來實現。下面的例子也會給出想要的結果:

point = (decimal)51 * 70/100; 
+0

奇怪,爲什麼這是必須的,因爲OP已經在使用十進制? – 2010-11-03 10:19:26

+2

@Peter van Kekem:51,70,100是'int'類型,因此選擇整數乘法和除法運算符。整數乘法或除法的結果總是再次爲整數類型,並且在使用整數上的「/」劃分時可能的小數位被截斷。 – 2010-11-03 10:23:01

+0

@Peter van Kekem:因爲計算是在將整數分配給小數之前完成的。這只是一行代碼,但它不是全部的一項操作。第一個整數相乘得到一個整數,然後將整數分成一個整數,然後將結果保存爲小數(因爲整數可以隱式轉換爲小數而沒有任何問題,所以可以正常工作)。精度在達到小數之前就已經丟失了。 – David 2010-11-03 10:24:37