首页 > 解决方案 > C# 将数字四舍五入为 double 的任意数字

问题描述

我希望将双精度数舍入到小数点右侧或左侧的任意数字。

Math.Round仅适用于小数点右侧的数字,我需要能够四舍五入到最接近 10s、100s、1000s 的值...

所需输入/输出示例:

Round(1234.56789,  0) == 1235
Round(1234.56789, -3) == 1234.568
Round(1234.56789,  3) == 1000

这个问题与C# 中小数点后两位的 Round double 不同? 因为我需要将值四舍五入到小数点左侧的位置,例如1,2345,000四舍五入到最接近的位置10,000

标签: c#rounding

解决方案


如果我们利用10数字位置的幂,我们可以将双精度数舍入到任意精度

public double RoundToDigit(double i, int digitPosition)
{
    double precision = Math.Pow(10, digitPosition);

    double result = Math.Round(i / precision, 0) * precision;

    return result;
}

推荐阅读