我正在开发一个应用程序,其中需要以下面的方式舍入数字:
我可以使用以下代码来舍入到1000和5000。
if (maxValue < 10000)
{
modifiedMaxvalue = (int)Math.Ceiling(dMax / 1000) * 1000;
}
else
{
modifiedMaxvalue = (int)Math.Ceiling(dMax / 5000) * 5000;
}
是否有一种通用的方式我们可以达到相同的数十,数百......直到数百万?
答案 0 :(得分:3)
这可以解决您的问题标题,但不完全是您的示例所示:
public static int RoundUp(int value) {
int n = 10;
while (n * 10 < value) n *= 10;
return (value + n - 1) / n * n;
}
它会返回以下结果:
45 -> 50
150 -> 200
201 -> 300
461 -> 500
502 -> 600
560 -> 600
还有:
4 -> 10
2506 -> 3000
15700 -> 20000
258000 -> 300000
5870000 -> 6000000
38780000 -> 40000000
308700000 -> 400000000
这是一个更安全的版本,对于非常大的值,它不会进入无限循环:
public static int RoundUp(int value) {
long n = 10, v = value;
while (n * 10 < v) n *= 10;
return (int)((v + n - 1) / n * n);
}
这可以处理最多2000000000的值(因为任何超过它的值将会舍入到无法表示为int
的值):
1705600000 -> 2000000000