C#小数点后四舍五入

本文关键字:四舍五入 小数点 | 更新日期: 2023-09-27 18:28:06

可能重复:
c#-如何将十进制值四舍五入到小数点后2位(用于页面输出)

如何返回小数点后长时间休息,如下所示:

3.786444499963

到此:

3.787

它不仅切割了点,还对数字的其余部分进行了舍入

C#小数点后四舍五入

Math.Ceiling(3.786444499963 * 1000) / 1000;

但公认的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添加到输入中。一般情况下,要将xn的小数位数四舍五入,

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);
    }