在開發軟件系統的時候,我們經常會跟金錢打交道,C#中使用decimal類型來表示金錢,decimal的基數是10(float和double都是2),因此它更适合用來存儲金錢類型的數值。對于金錢,我們也經常會進行四舍五入操作(有的系統使用分整型可能不需要四舍五入的操作),那麼在C#中如何對decimal類型進行四舍五入呢?
Math.Round的使用我們可以使用Math.Round函數來對decimal類型的數值進行“四舍五入”處理。來看下面的代碼:
decimal levyMoney1 = 77.24m;
decimal levyMoney2 = 24.56m;
//設置保留一位小數并輸出
("money1對應的輸出:" Math.Round(levyMoney1, 1)).Dump();
("money2對應的輸出:" Math.Round(levyMoney2, 1)).Dump();
輸出結果如下:
結果跟我們期望的一緻!但是事實真的是這樣嗎?讓我們下面再看個示例。
decimal levyMoney3 = 50.35m;
decimal levyMoney4 = 50.45m;
//C#的Round函數都是采用Banker’s rounding(銀行家算法),即:四舍六入五取偶
("money3對應的輸出:" Math.Round(levyMoney3, 1)).Dump();
("money4對應的輸出:" Math.Round(levyMoney4, 1)).Dump();
輸出結果如下:
納尼?輸出的竟然都是50.4?和我們理解的“四舍五入”不一緻啊!這是因為C#的Round函數都是采用Banker’s rounding(銀行家算法),即:四舍六入五取偶。所以結果才都是50.4。
正确表達四舍五入那麼,如何才能正确地表達四舍五入呢?Round的方法有個重載,其中第三個參數(MidpointRounding)用來表示舍入的規範。因此,四舍五入可以通過設置該參數為MidpointRounding.AwayFromZero來達到目的,如下:
decimal levyMoney3 = 50.35m;
decimal levyMoney4 = 50.45m;
("money3四舍五入對應的輸出:" Math.Round(levyMoney3, 1, MidpointRounding.AwayFromZero)).Dump();
("money4四舍五入對應的輸出:" Math.Round(levyMoney4, 1, MidpointRounding.AwayFromZero)).Dump();
輸出結果如下:
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!