C#小数点后四舍五入
本文关键字:四舍五入 小数点 | 更新日期: 2023-09-27 18:28:06
可能重复:
c#-如何将十进制值四舍五入到小数点后2位(用于页面输出)
如何返回小数点后长时间休息,如下所示:
3.786444499963
到此:
3.787
它不仅切割了点,还对数字的其余部分进行了舍入
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
添加到输入中。一般情况下,要将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);
}