C# 将数字四舍五入到最接近的100、1000和所有数字的通用解决方案?
我正在开发一个应用程序,其中需要按以下方式对数字进行四舍五入:C# 将数字四舍五入到最接近的100、1000和所有数字的通用解决方案?,c#,math,rounding,C#,Math,Rounding,我正在开发一个应用程序,其中需要按以下方式对数字进行四舍五入: 45 50 150 200 201 400 461500 502 1000 560 1000 我可以使用以下代码四舍五入到1000秒和5000秒 if (maxValue < 10000) { modifiedMaxvalue = (int)Math.Ceiling(dMax / 1000) * 1000; } else { modifiedMaxvalue = (int)Math.Ceiling(dMax /
if (maxValue < 10000)
{
modifiedMaxvalue = (int)Math.Ceiling(dMax / 1000) * 1000;
}
else
{
modifiedMaxvalue = (int)Math.Ceiling(dMax / 5000) * 5000;
}
if(最大值<10000)
{
修改后的最大值=(整数)数学上限(最大值/1000)*1000;
}
其他的
{
修改后的最大值=(整数)数学上限(最大值/5000)*5000;
}
有没有一种通用的方法可以让一个人、几十个人、几百个人……一直到几百万人都能做到这一点?这就是你的问题标题所说的,但并不完全是你的例子所显示的:
public static int RoundUp(int value) {
int n = 10;
while (n * 10 < value) n *= 10;
return (value + n - 1) / n * n;
}
而且:
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);
}
也许你可以利用数学。Log10(…)?Log10(1000)=3,Log10(10000)=4,etcHi Nikhil,目的是获得下一个舍入值。如果输入为10s,则舍入值可以是100s。如果输入是100秒,它可以是1000秒。那里没有逻辑,只有caos。。。如果你想要一个通用的方法,你应该有一个通用的规则。。为什么从201发到400发?为什么502发到1000发?45发到50发,150发到200发?
public static int RoundUp(int value) {
long n = 10, v = value;
while (n * 10 < v) n *= 10;
return (int)((v + n - 1) / n * n);
}
1705600000 -> 2000000000