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

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

1 голос
/ 08 ноября 2010
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 ]

10 голосов
/ 08 ноября 2010

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

3 голосов
/ 08 ноября 2010

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

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

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

var output = amount / 4m;
labelOutput.Text = "You need: " + System.Math.Ceiling(output);
2 голосов
/ 08 ноября 2010

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

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

1 голос
/ 08 ноября 2010

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

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

1 голос
/ 08 ноября 2010
var output = Math.Ceiling(amount / 4);
0 голосов
/ 08 ноября 2010

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

0 голосов
/ 08 ноября 2010

Используйте Math.Ceiling(amount / 4) вместо.

0 голосов
/ 08 ноября 2010

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

...