Округление числа

var output = Convert.ToDecimal(amount / 4);

labelOutput.Text = "You need: " + System.Math.Round(output,0);

этот код является частью калькулятора для игры

"количество" - это то, сколько пользователь хочет заработать, и чтобы сделать один предмет, вам нужно 4 штуки ( / 4)

например:

сколько?: 20

20/4 = 5

"вам нужно 5 штук

но когда я ввожу 21, все равно говорит 5 штук, но пользователям нужно 6 штук, чтобы сделать 21 штук (по 4 на каждый предмет)

Как я могу округлить вывод, чтобы заставить его сказать 6 вместо 5, когда входное значение, в данном случае, 21 - 23?

(извините, если я не объяснил это достаточно хорошо)

8 ответов

Решение
var output = Math.Ceiling(amount / 4);

Использование Math.Ceiling

Чтобы дать полный ответ (сочетая вышеизложенное):

При условии, что amount является целым числом, вам нужно, чтобы одно из значений в вашей операции деления было нецелым (либо float / double или же decimal Я выбрал decimal в моем примере с m суффикс). Если обе части операции деления являются интегральными типами, вы получите интегральный ответ (отбрасывая остаток).

Вы тогда звоните Ceiling чтобы получить наименьшее целое значение, равное или большее, чем output (скорее, чем Round, который дает ближайшее целочисленное значение output).

var output = amount / 4m;
labelOutput.Text = "You need: " + System.Math.Ceiling(output);

Функция округления округляет число до ближайшего.

Для округления вы должны использовать Math.Ceiling(). Если вам нужно округлить, вы должны использовать Math.Floor().

Предполагая, что "сумма" является целочисленным типом, проблема в том, что вы выполняете целочисленное (целое число) деление прямо в первой строке.

Попробуйте изменить первую строку на: var output = Convert.ToDecimal(amount) / 4.0;

Round округляет число - вы всегда хотите округлить, что вы можете получить, используя Ceiling функция

Возможно, немного некрасиво var output = Convert.ToDecimal((amount+3) / 4); Существует крайний случай, если ваша сумма находится рядом с MaxValue, где этот код может сломаться, в зависимости от вашего знаменателя.

Использование Math.Ceiling(amount / 4) вместо.

Другие вопросы по тегам