sencsk Ответов: 1

Math. round не работает для 1.44-- & gt;1.50


моя потребность в том, что пользовательский ввод равен 1.53, означает, что выход будет равен 1.50, как показано ниже.

user input       Expectedoutput

1.20          1.50
1.50          1.50
1.60          2.00



как достичь этого результата

Что я уже пробовал:

я пробовал математику. круглая математика.Раунд (10.45, 1, MidpointRounding.ToEven), но я не смог достичь результата



Я нашел решение, используя следующий метод

double  Expected_result1 = 25.51;
value = Expected_result1 - Math.Floor(Expected_result1);// get fraction
Expected_result1 = ((value >= 0.01) && (value <= 0.50)) ? (Math.Floor(Expected_result1) + 0.5) : Math.Ceiling(Expected_result1);

1 Ответов

Рейтинг:
1

Philippe Mori

Это не так Math.Round работает. Обычно округление производится в определенной десятичной позиции. Таким образом, если вы укажете 1 десятичную дробь для округления, то, по сути, ответом будет ближайшее число с 1 десятичной дробью.

Затем у вас есть несколько вариантов, чтобы указать округление средней точки. Это, как правило, более полезно для финансовых приложений, чтобы уменьшить совокупную ошибку.

Если вы хотите округлить до определенного кратного, например 0,5, то вам придется добавить дополнительный код. Например, вы можете умножить на 2, округлить до единицы, а затем разделить на 2.

Вот код с одной операцией на строку и значением в комментарии.

var value = 10.45;             // 10.45
value *= 2.0;                  // 20.90
value = Math.Round(value, 0);  // 21.00
value /= 2.0;                  // 10.50


Однако как вы ожидаете, что 1.20 будет округлено до 1.50? С приведенным выше кодом он округлится до 1,00. Заменяющий Math.Round около Math.Ceiling возможно, это то, что вы хотите (однако вы не можете указать количество десятичных знаков).

Кроме того, вы можете добавить 0,5 перед вызовом Math.Round В этом случае округление средней точки может быть более важным.

Для получения информации о том, как работает округление, может быть полезно ознакомиться с документацией, поскольку она очень ясна в документации:Перечисление MidpointRounding (Система)[^]