Как округлить десятичное значение до ближайшего значения 0,05? - PullRequest
17 голосов
/ 19 сентября 2009

Есть ли способ округлить десятичное значение до ближайшего значения 0,05 в .Net?

Пример:

7,125 -> 7,15

6,66 -> 6,7

Если он уже доступен, может ли кто-нибудь предоставить мне алгоритм?

Ответы [ 5 ]

27 голосов
/ 19 сентября 2009

Как насчет:

Math.Ceiling(myValue * 20) / 20
10 голосов
/ 21 января 2011

Используйте это:

Math.Round(mydecimal / 0.05m, 0) * 0.05m;

Та же логика может использоваться в T-SQL:

ROUND(@mydecimal / 0.05, 0) * 0.05

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

5 голосов
/ 14 августа 2013

Нечто подобное должно работать для любого шага, а не только для 0,05:

private decimal RoundUp (decimal value, decimal step)
{
    var multiplicand = Math.Ceiling (value / step);
    return step * multiplicand;
}
2 голосов
/ 08 февраля 2010

Math .. ::. Round метод (десятичный, Int32, MidpointRounding)

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

   Math.Round(1.489,2,MidpointRounding.AwayFromZero)
1 голос
/ 19 сентября 2009

Дублировано здесь и здесь для ruby ​​и python. Это не должно быть слишком по-другому.

...