Округление значений вверх или вниз в C # - PullRequest
33 голосов
/ 13 апреля 2010

Я создал игру, которая дает счет в конце игры, но проблема в том, что этот счет иногда является числом с большим количеством цифр после запятой (например, 87.124563563566). Как бы мне округлить значение в большую или меньшую сторону, чтобы получить что-то вроде 87,12?

Спасибо!

Ответы [ 8 ]

92 голосов
/ 14 апреля 2010

Используйте Math.Ceiling(87.124563563566) или Math.Floor(87.124563563566) для постоянного округления вверх или вниз. Я считаю, что это идет к ближайшему целому числу.

37 голосов
/ 13 апреля 2010

Попробуйте использовать Math.Round . Его различные перегрузки позволяют вам указать, сколько цифр вы хотите, а также, каким образом вы хотите, чтобы оно округляло число.

11 голосов
/ 18 июня 2016

Чтобы всегда округлять до 2 десятичных знаков:

decimal score = 87.126;
Math.Floor(score * 100) / 100; // 87.12

Чтобы всегда округлять до 2 десятичных знаков:

decimal score = 87.124;
Math.Ceiling(score * 100) / 100; // 87.13
7 голосов
/ 09 апреля 2015

Вы просто хотите отформатировать строку, а не портить счет.

5 голосов
/ 14 апреля 2010
double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);
4 голосов
/ 10 апреля 2015

Число подходит для типа переменной double и математически верно.
У вас есть два хорошо продуманных решения, чтобы избежать подобных ситуаций.

  1. строковое решение : Когда вы показываете число пользователям, просто сделайте это: variable.ToString ("0.00"). ToString просто сокращает число.
  2. решение для округления : Если вы хотите управлять округлением, вы можете использовать библиотеку Math.

Если вы хотите узнать, почему вы видите это «странное» число, вы можете прочитать там: иррациональные числа

1 голос
/ 15 апреля 2015

У меня недостаточно репутации, чтобы добавлять комментарии, поэтому я должен создать ответ. Но Тимурид прав, просто отформатируйте строку.

Я думаю, что вы ищете:

var myScore = 87.124563563566
var toShowOnScreen = myScore.ToString("0.00");

Некоторые из пользовательских способов форматирования ваших значений описаны здесь: https://msdn.microsoft.com/en-US/library/7x5bacwt(v=vs.80).aspx

0 голосов
/ 16 апреля 2015

Многие люди рекомендуют вам использовать библиотеку Math для округления вашего числа, но даже это может привести к очень незначительным ошибкам округления. Math.Round может, а иногда и возвращает числа с конечными нулями и очень маленькими ошибками округления. Это связано с тем, что внутренне числа с плавающей запятой и числа с двойными числами по-прежнему представлены в виде двоичных чисел, и поэтому часто бывает трудно точно представить некоторые небольшие десятичные числа.

Ваш лучший вариант - либо использовать только форматирование строк, либо, если вы действительно хотите, чтобы он действительно округлялся, объединить два:

Math.Round(val, 2).ToString("0.00")
...