Ответ 1
Попробуйте использовать Math.Round. Его различные перегрузки позволяют вам указать, сколько цифр вы хотите, а также каким способом вы хотите округлить число.
Я создал игру, которая дает оценку в конце игры, но проблема в том, что эта оценка иногда является числом с большим количеством цифр после десятичной точки (например, 87.124563563566). Как бы я мог округлить или уменьшить значение, чтобы у меня было что-то вроде 87.12?
Спасибо!
Попробуйте использовать Math.Round. Его различные перегрузки позволяют вам указать, сколько цифр вы хотите, а также каким способом вы хотите округлить число.
Используйте Math.Ceiling(87.124563563566)
или Math.Floor(87.124563563566)
для округления или округления вниз. Я считаю, что это доходит до ближайшего целого числа.
Чтобы всегда округлить до двух знаков после запятой:
decimal score = 87.126;
Math.Floor(score * 100) / 100; // 87.12
Всегда округлять до двух знаков после запятой:
decimal score = 87.124;
Math.Ceiling(score * 100) / 100; // 87.13
Вы просто хотите отформатировать строку, чтобы не повредить счет.
double test2 = 87.2345524523452;
double test3 = Math.Round(test2, 2);
Число отлично подходит для типа переменной double
и математически корректно.
У вас есть два хорошо установленных решения, чтобы избежать подобных ситуаций.
Math
.Я хочу знать, почему вы видите этот "странный" номер, вы можете прочитать там: иррациональные номера
У меня недостаточно репутации для добавления комментариев, поэтому мне нужно создать ответ. Но timurid прав, просто отформатируйте строку.
Я думаю, что вы ищете:
var myScore = 87.124563563566
var toShowOnScreen = myScore.ToString("0.00");
Некоторые из пользовательских способов форматирования ваших значений описаны здесь: https://msdn.microsoft.com/en-US/library/7x5bacwt(v=vs.80).aspx
Многие люди выступают за использование библиотеки Math для округления вашего номера, но даже это может привести к очень незначительным ошибкам округления. Math.Round может, а иногда и возвращает числа с несколькими конечными нулями и очень маленькими ошибками округления. Это связано с тем, что внутри, поплавки и удвоения по-прежнему представлены в виде двоичных чисел, и поэтому часто бывает трудно представить некоторые небольшие десятичные числа чисто.
Ваш лучший вариант - либо использовать только форматирование строк, либо, если вы действительно хотите его объединить, соедините два:
Math.Round(val, 2).ToString("0.00")