将数字舍入到下一个最高的位置

时间:2018-11-21 17:16:16

标签: c# math rounding

我正在尝试创建一个函数,该函数将根据最大位数(最左边的数字)返回下一个最高的(舍弃术语)“舍入”数字。

例如:

 17     >  20  
 328    >  400  
 18564  >  20000

 //Already round numbers will stay the same:  
 500     >  500

我知道我可以做这样的事情:

int customRound(int i)
{
    string s = i.ToString();
    if (int.Parse(s.Substring(1)) > 0)
    {
        string greatestDigit = s.Substring(0, 1);
        string digit = (int.Parse(greatestDigit) + 1).ToString();
        return int.Parse(digit + string.Empty.PadRight(s.Length - 1, '0'));
    }
    return i;
}

但是那感觉真的很棘手,我敢肯定还有一种更优雅,更数学的方式来做到这一点。

2 个答案:

答案 0 :(得分:6)

您可以使用Math.Log10确定数字(前一个数字为10的幂)的量级,然后将其舍入为下一个倍数:

int customRound(int i)
{
    var digits = (int)Math.Floor(Math.Log10(i));
    var unit = (int)Math.Pow(10, digits);
    return (int)(Math.Ceiling((double)i / unit) * unit);
}

答案 1 :(得分:1)

encapsulation: ViewEncapsulation.None