How to round a integer to the close hundred?

前端 未结 9 1189
生来不讨喜
生来不讨喜 2020-11-29 08:57

I don\'t know it my nomenclature is correct! Anyway, these are the integer I have, for example :

76
121
9660

And I\'d like to round them to

相关标签:
9条回答
  • 2020-11-29 09:23

    Just some addition to @krizzzn's accepted answer...

    Do note that the following will return 0:

    Math.Round(50d / 100d, 0) * 100;
    

    Consider using the following and make it return 100 instead:

    Math.Round(50d / 100d, 0, MidpointRounding.AwayFromZero) * 100;
    

    Depending on what you're doing, using decimals might be a better choice (note the m):

    Math.Round(50m / 100m, 0, MidpointRounding.AwayFromZero) * 100m;
    
    0 讨论(0)
  • 2020-11-29 09:28

    Try the Math.Round method. Here's how:

    Math.Round(76d / 100d, 0) * 100;
    Math.Round(121d / 100d, 0) * 100;
    Math.Round(9660d / 100d, 0) * 100;
    
    0 讨论(0)
  • 2020-11-29 09:29

    I know this is an old thread. I wrote a new method. Hope this will be useful for some one.

        public static double Round(this float value, int precision)
        {
            if (precision < -4 && precision > 15)
                throw new ArgumentOutOfRangeException("precision", "Must be and integer between -4 and 15");
    
            if (precision >= 0) return Math.Round(value, precision);
            else
            {
                precision = (int)Math.Pow(10, Math.Abs(precision));
                value = value + (5 * precision / 10);
                return Math.Round(value - (value % precision), 0);
            }
        }
    

    Example:

    float value = F6666.677777;
    Console.Write(value.Round(2)) // = 6666.68
    Console.Write(value.Round(0)) // = 6667
    Console.Write(value.Round(-2)) // = 6700 
    
    0 讨论(0)
  • 2020-11-29 09:30

    Try this expression:

    (n + 50) / 100 * 100
    
    0 讨论(0)
  • 2020-11-29 09:32

    If you only want to round integer numbers up (as the OP actually did), then you can resort to this solution:

    public static class MathExtensions
    {
        public static int RoundUpTo(this int number, int nearest)
        {
            if (nearest < 10 || nearest % 10 != 0)
                throw new ArgumentOutOfRangeException(nameof(nearest), $"{nameof(nearest)} must be a positive multiple of 10, but you specified {nearest}.");
    
            int modulo = number % nearest;
            return modulo == 0 ? number : modulo > 0 ? number + (nearest - modulo) : number - modulo;
        }
    }
    

    If you want to perform floating-point (or decimal) rounding, then resort to the answers of @krizzzn and @Jim Aho.

    0 讨论(0)
  • 2020-11-29 09:33
    int num = 9660;
    int remainder = num % 100;
    Console.WriteLine(remainder < 50 ? num - remainder : num + (100 -remainder));
    

    Note: I haven't tested this thoroughly.

    0 讨论(0)
提交回复
热议问题