将任何n位数字四舍五入为(n-1)个零位

bre*_*dog 5 c# vb.net rounding

很抱歉很难制定。

我需要这样舍入:

12 -> 10
152 -> 200
1538 -> 2000
25000 -> 30000
etc. 
Run Code Online (Sandbox Code Playgroud)

扭曲我的头,但看不到如何做到这一点。必须适用于任意n个数字。任何人都有一个优雅的方法吗?

C#或vb.net

log*_*cnp 5

这个怎么样:

        double num = 152;

        int pow = (int)Math.Log10(num);

        int factor = (int)Math.Pow(10, pow);

        double temp = num / factor;

        double result = Math.Round(temp) * factor;
Run Code Online (Sandbox Code Playgroud)


Dav*_*nde 3

我认为你应该尝试这样的事情:

public int Round( int number)
{
    int power = number.ToString().Length - 1;
    int sz = Math.Pow(10, power);

    int rounded = (int)Math.Round( number / sz );

    return rounded * sz;
}
Run Code Online (Sandbox Code Playgroud)

这个想法是获取最接近的 10 次幂的大小,可以通过表示为字符串的数字的长度来获得。然后将该数字除以该次方,使其类似于 1,2,然后使用 Math.Round 方法对其进行舍入,并通过重新乘以该次方来恢复大小。

很像之前的答案...