Мне нужно найти деление двух целых чисел и округлить его до следующего верхнего целого числа
e.g x = 7/y = 5 = 2; здесь x и y всегда больше 0
Это мой текущий код
int roundValue = x % y > 0? x / y + 1: x / y;
Есть ли лучший способ сделать это?
Ответ 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().
Он дает верхнее значение.