Круглые интегральные числа в C # - PullRequest
0 голосов
/ 24 сентября 2018

Я искал этот вопрос в течение нескольких часов, но не нашел ответа, поэтому спрашиваю:

Я ищу метод или что-то, чтобы округлить 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;

Примечание: Я не ищу способкруглые десятичные числа.

Ответы [ 4 ]

0 голосов
/ 24 сентября 2018

Методы округления в большую и меньшую сторону для ожидаемого конечного нуля:

    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));
0 голосов
/ 24 сентября 2018
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)));
}
0 голосов
/ 24 сентября 2018

Взгляните на:

Math.Round

Пример использования: Округление значения с плавающей запятой

Может быть перенесено в значения без плавающей запятой.Может это тебе поможет?

0 голосов
/ 24 сентября 2018

Вы можете попробовать следующие функции:

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, ...).

Надеюсь, это поможет!

...