【问题标题】:Round Integral numbers in C#C# 中的整数整数
【发布时间】:2019-02-27 17:46:20
【问题描述】:

我一直在搜索这个问题几个小时,但我没有找到我的答案,所以我问它:

我正在寻找将25,599,999 舍入为25,000,000 或将25,599,999 舍入为30,000,000 的方法或东西:

 int num1 = 25599999;
 Console.WriteLine(RoundDown(num1, 6 /* This is the places (numbers from end that must be 0) */)) // Should return 25,000,000;

或四舍五入:

 int num1 = 25599999;
 Console.WriteLine(RoundUp(num1, 6 /* This is the places (numbers from end that must be 0) */)) // Should return 30,000,000;

注意:我不是在寻找四舍五入的方法。

【问题讨论】:

  • 搜索“四舍五入”有很多答案
  • 你尝试了什么?显示您的代码。我认为您无法直接找到这种自定义。
  • Math.Floor, Math.Ceiling?
  • 我不是在寻找四舍五入的十进制数。 @Dmitry Bychenko
  • 不要投反对票,阅读问题并记住,我并不愚蠢地提出已被多次回答的问题。

标签: c# .net numbers int rounding


【解决方案1】:

对预期尾随零计数进行向上和向下舍入的方法:

    public static int RoundUp(int number, int trailingZeroes)
    {
        var divider = (int)Math.Pow(10, trailingZeroes);
        return (number / divider + (number % divider > 0 ? 1 : 0)) * divider;
    }

    public static int RoundDown(int number, int trailingZeroes)
    {
        var divider = (int)Math.Pow(10, trailingZeroes);
        return number / divider * divider;
    }

然而,这将返回:

Console.WriteLine(RoundUp(25599999, 6));

结果将为 26 000 000。如果您希望将其四舍五入为 30 000 000,那么您需要使用 7 个尾随零来调用它,因为在您的示例中,您将四舍五入为 7 个尾随零:

Console.WriteLine(RoundUp(25599999, 7));

【讨论】:

    【解决方案2】:

    看看:

    Math.Round
    

    用法示例:Rounding a Floating-Point Value

    可以转换为非浮点值。 也许这对你有帮助?

    【讨论】:

      【解决方案3】:
      int RoundDown(int num, int digitsToRound)
      {
          double tmp = num / Math.Pow(10, digitsToRound);
      
          return (int)(Math.Floor(tmp) * Math.Pow(10, digitsToRound));
      }
      
      int RoundUp(int num, int digitsToRound)
      {
          double tmp = num / Math.Pow(10, (digitsToRound + 1)) + 1;
      
          return (int)(Math.Floor(tmp) * Math.Pow(10, (digitsToRound + 1)));
      }
      

      【讨论】:

      • 非常感谢!这正是我想要的。
      【解决方案4】:

      你可以试试这些功能:

      public void RoundUp(int n){
          int up = ((n / 1000000) + 1) * 1000000;
          return up;
      }
      
      public void RoundDown(int n){
          int down = (n / 1000000) * 1000000;
          return down;
      }
      

      这仅适用于数百万的数字(如 2 000 000、25 252 325、...)。

      希望对你有帮助!

      【讨论】:

      • 是的,对不起,我已经习惯了另一种语言。我正在改变它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 2020-06-12
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多