可能重复:
c# - How do I round a decimal value to 2 decimal places (for output on a page)
如何在这样的点之后长时间休息返回小数:
3.786444499963
到此:
3.787
它不仅削减了分数,而且还围绕数字的其余部分
答案 0 :(得分:5)
Math.Ceiling(3.786444499963 * 1000) / 1000;
答案 1 :(得分:4)
但普遍接受的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
你看到我在那里做了什么吗?在使用0.0005m
之前,我在输入中添加了Math.Round
。一般来说,要将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?你没有明确指出你想要的东西,所以我会把这个边缘情况留给你。
答案 2 :(得分:0)
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);
}