我運行這段代碼:Math.Round十進制
decimal d = 1.45M;
Console.WriteLine((System.Math.Round(d,0,MidpointRounding.AwayFromZero).ToString()));
在這裏,我希望可以將輸出爲2,因爲1.45時四捨五入至小數點第1地點將是1.5,當旁邊四捨五入到0位小數應2.
但是,我得到的答案爲1
是我的假設是正確的?如果是這樣,這是Math.Round的錯誤嗎?
我運行這段代碼:Math.Round十進制
decimal d = 1.45M;
Console.WriteLine((System.Math.Round(d,0,MidpointRounding.AwayFromZero).ToString()));
在這裏,我希望可以將輸出爲2,因爲1.45時四捨五入至小數點第1地點將是1.5,當旁邊四捨五入到0位小數應2.
但是,我得到的答案爲1
是我的假設是正確的?如果是這樣,這是Math.Round的錯誤嗎?
不,這不是一個錯誤。你的邏輯談論兩次四捨五入 - 但你只有一個電話Round
。 1.45小於1和2(1.5),所以它向下調整至1
如果你想要的代碼按照你的邏輯之間的中點,你可以這樣做:
using System;
class Test
{
static void Main()
{
decimal d = 1.45m;
d = Math.Round(d, 1, MidpointRounding.AwayFromZero); // 1.5
d = Math.Round(d, 0, MidpointRounding.AwayFromZero); // 2
Console.WriteLine(d);
}
}
除非你指定,你想要兩個舍入階段雖然(如上).NET將只做一個。
你不能做'圓'行動一位數字!在這裏,您說:
1.45 rounded to 1 decimal place:1.5
1.5 rounded to 0 decimal place:2
這是不正確的,這裏1.45四捨五入到0的數字,你只需要檢查0.4。
你的理解是不正確的。
您已指定小數值爲0,因此提供的值將四捨五入爲整數值。
來自MSDN「如果d中小數位右側第一個數字的值爲5,則小數位中的數字如果是奇數則向上取整,如果它是甚至」
作爲第一個值小數點右邊是4,不是五個,然後返回的值是1。
如果十進制值已經成爲1.55,那麼答案將是2
如果十進制值是2.55,那麼答案也會是2!
由於您正在指定中點舍入行爲,所以這將會改變,但是當您要求該回合使用小數= 0時,它只會檢查小數點後面的第一個數字。
逸岸,如果你指定的小數位= 1爲
Math.Round(1.45,1)
然後你的答案是1.4,因爲它的小數點的第一個圓後,檢查第二位。
請運行這個 – PrateekSaluja 2010-09-06 08:52:33
d = Math.Round(d,0,MidpointRounding.AwayFromZero); 輸出將是1不是2. – PrateekSaluja 2010-09-06 08:53:06
@ prateeksaluja20:我跑了它。結果是2.請記住,當Math.Round的第二次調用運行時,'d'爲1.5m ...將第一次調用的結果記錄到'd'中。 – 2010-09-06 08:55:33