Подтвердить что ты не робот

Math Round для всегда верхнего целого числа

Мне нужно найти деление двух целых чисел и округлить его до следующего верхнего целого числа

e.g x = 7/y = 5 = 2; здесь x и y всегда больше 0

Это мой текущий код

 int roundValue = x % y > 0? x / y + 1: x / y;

Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Вы можете использовать Math.Ceiling... но для этого потребуется преобразовать значения/из double.

Другой альтернативой является использование Math.DivRem для выполнения обеих частей одновременно.

public static int DivideRoundingUp(int x, int y)
{
    // TODO: Define behaviour for negative numbers
    int remainder;
    int quotient = Math.DivRem(x, y, out remainder);
    return remainder == 0 ? quotient : quotient + 1;
}

Ответ 2

Попробуйте (int)Math.Ceiling(((double)x) / y)

Ответ 3

Все решения выглядят слишком жесткими. Для верхнего значения x/y используйте этот

( x + y - 1 ) / y

Ответ 4

dunno, что лучший способ или как определить лучший способ (если с точки зрения производительности вы должны запускать тесты, чтобы увидеть, что будет быстрее), но вот мое решение:

int roundValue = x / y + Convert.ToInt32(x%y>0);

p.s.

по-прежнему приходится иметь дело с neg. числа... IMO это самый простой.

Ответ 5

Используйте функцию ceil(). Он дает верхнее значение.