点休息后C#十进制数轮

时间:2012-03-15 14:09:16

标签: c#

  

可能重复:
  c# - How do I round a decimal value to 2 decimal places (for output on a page)

如何在这样的点之后长时间休息返回小数:

3.786444499963

到此:

3.787

它不仅削减了分数,而且还围绕数字的其余部分

3 个答案:

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