可能重複:
c# - How do I round a decimal value to 2 decimal places (for output on a page)C#十進制數輪後點休息
如何像點後長期休養返回十進制:
3.786444499963
本:
3.787
它不只是砍分,還輪數
可能重複:
c# - How do I round a decimal value to 2 decimal places (for output on a page)C#十進制數輪後點休息
如何像點後長期休養返回十進制:
3.786444499963
本:
3.787
它不只是砍分,還輪數
其餘但是3.786444499963
到小數點後三位是3.786
普遍接受的舍入。你爲什麼不這樣想?
這樣:
var round = Math.Round(3.786444499963m, 3, MidpointRounding.AwayFromZero);
Console.WriteLine(round == 3.786m); // prints true
如果你想讓它總是四捨五入:
var round = Math.Round(3.786444499963m + 0.0005m, 3);
Console.WriteLine(round == 3.787m); // prints true
你看我做什麼呢?在使用Math.Round
之前,我在輸入中添加了0.0005m
。在一般情況下,舍x
到n
小數,
var round = Math.Round(x + 5m * Convert.ToDecimal(Math.Pow(10, -n - 1)), n);
或者,也許避免了難看double/decimal
轉換:
int k = 1;
decimal value = 5m;
while(k <= n + 1) { value /= 10m; k++; }
var round = Math.Round(x + value, n);
有你需要知道的邊緣情況。 3.786會發生什麼?是應該四捨五入到3.787還是保持在3.786?你還沒有詳細說明你想要的,所以我會留下這個邊緣情況給你。
RoundUp(3.786444499963M, 3);
static decimal RoundUp(decimal dec, int precision)
{
decimal rounder = (decimal)(0.5 * Math.Pow(10, -precision));
return Math.Round(dec + rounder, precision);
}
它將返回3.786。 Math.Round不會從最後一位數字開始「級聯」。它只是看數字位置+ 1 – xanatos 2012-03-15 14:12:36
我需要它整理 – 2012-03-15 14:16:34
@ roy.d:有三種主要的方法來回合。例如舍入爲無小數:使用舍入到最接近的整數(0.3 - > 0; 0.7 - > 1);對於Ceil,aproximation始終是最接近的較高整數(0.3 - > 1; 0.7 - > 1),而Floor與aproximation總是最接近的較低整數(0.3 - > 0; 0.7 - > 0)。你需要哪一個? – 2012-03-15 14:47:44
Math.Ceiling(3.786444499963 * 1000)/1000;
謝謝兩位解答作品: Math.Ceiling(3.786444499963 * 1000)/ 1000; and Math.Round(3.786444499963m + 0.0005m,3); – 2012-03-15 14:34:52
你知道這是錯誤的方式來回合,對吧?正確的方法是簡單地查看第四個十進制數字(在這種情況下) – xanatos 2012-03-15 14:13:29
您是否嘗試過我的答案? – 2012-03-15 14:23:33
@xanatos如果你在做銀行家的四捨五入,你需要看第四個數字,如果是5,看第四個數字後是否有非零數字。 – phoog 2012-03-15 14:50:30