#realJSOP
Вам придется писать код и делать то, что вы хотите. Math.Round
только округляет до следующего самого высокого десятичного значения (задается количеством десятичных позиций для округления), а также Math.Ceiling
только округляет до следующего целого числа.
Вот метод, который позволяет вам использовать любой интервал, который вы хотите. Обязательно установите количество знаков после запятой в соответствии с интервалом.
private static double RoundToNext(double value, double interval, double places)
{
decimal factor = (decimal)Math.Pow(10d, places);
decimal whole = (decimal)(Math.Floor(value));
decimal fraction = (decimal)((decimal)value - whole) * factor;
decimal wholeInterval = (int)((decimal)interval * factor);
decimal adjustedFraction = (fraction + wholeInterval - (fraction % wholeInterval)) / factor;
decimal result = (decimal)whole + adjustedFraction;
return (Convert.ToDouble(result));
}
Пример использования:
double value = 1.23;
double result = RoundToNext(value, 0.05, 2d);
То
result
будет 1.25.
Конечно, если вы просто округляете центы (или вообще значение валюты), другой ответ, опубликованный здесь, является лучшим вариантом.
Примечание: Я предпочитаю делать математику на значениях с плавающей запятой, сначала преобразуя их в
decimal
, потому что как только вы сделаете математику на
float
/
double
результат почти никогда не бывает таким , каким вы думаете, что он должен быть.
bondkmost most
пожалуйста, приведите мне пример ..
как я могу использовать его, если я получаю значение из текстового поля
#realJSOP
Преобразуйте это значение в двойное. Я обновляю свой ответ, чтобы показать, как использовать этот метод.
Richard Deeming
"Математика.Округление только округляет до следующего самого высокого десятичного значения..."
Пока вы не столкнетесь с вечной радостью, которая является "округлением банкира", которое является дефолтом. :)
Перечисление Средних Точек[^]
(И даже "нормальное округление человека" - это далеко от нуля скорее, чем следующий по высоте.)