bondkmost most Ответов: 2

Как приблизиться к значению 9.32 - 9.35 и 9.58 - 9.60 кода C#


у меня есть visual studio 2015 и мне нужно приблизить значение вверх и вниз 0,5
пример :
С 9.32 до 9.35
9.58 до 9,60
1.13 - 1.15
1.18 - 1.20
С 9.96 до 10.00

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

я пробую математику, раунд и математику.Потолок

Richard MacCutchan

С какой проблемой вы столкнулись и какой язык программирования используете?

2 Ответов

Рейтинг:
12

Patrice T

Цитата:
Как приблизиться к значению 9.32 - 9.35 и 9.58 - 9.60 кода C#

чтобы округлить до ближайших 5 центов, вам нужно
rounded= round(value*20.0)/20.0;


#realJSOP

5'd (в случае, если это то, что он хочет сделать, и просто плохо описал это). :)

Patrice T

Спасибо

Maciej Los

5ed!

Patrice T

И тебе спасибо

Рейтинг:
0

#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 результат почти никогда не бывает таким , каким вы думаете, что он должен быть.


Maciej Los

Хорошо объяснил!
[РЕДАКТИРОВАТЬ]
Голосуют!

bondkmost most

пожалуйста, приведите мне пример ..
как я могу использовать его, если я получаю значение из текстового поля

#realJSOP

Преобразуйте это значение в двойное. Я обновляю свой ответ, чтобы показать, как использовать этот метод.

bondkmost most

Огромное спасибо!..
сделано..

Richard Deeming

"Математика.Округление только округляет до следующего самого высокого десятичного значения..."

Пока вы не столкнетесь с вечной радостью, которая является "округлением банкира", которое является дефолтом. :)

Перечисление Средних Точек[^]

(И даже "нормальное округление человека" - это далеко от нуля скорее, чем следующий по высоте.)