我正在尝试创建一个函数,该函数将根据最大位数(最左边的数字)返回下一个最高的(舍弃术语)“舍入”数字。
例如:
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;
}
但是那感觉真的很棘手,我敢肯定还有一种更优雅,更数学的方式来做到这一点。
答案 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