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 /

我正在开发一个应用程序,其中需要按以下方式对数字进行四舍五入:

  • 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 / 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