Округление числа
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 ответов
Чтобы дать полный ответ (сочетая вышеизложенное):
- Проблема 1: вы делаете целочисленное деление
- Проблема 2: вам нужно использовать
Ceiling
вместоRound
При условии, что 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, где этот код может сломаться, в зависимости от вашего знаменателя.