Подтвердить что ты не робот

Округление значений вверх или вниз в С#

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

Спасибо!

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Всегда округлять до двух знаков после запятой:

decimal score = 87.124;
Math.Ceiling(score * 100) / 100; // 87.13

Ответ 4

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

Ответ 5

double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);

Ответ 6

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

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

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

Ответ 7

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

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

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

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

Ответ 8

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

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

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