Ответ 1
Как насчет:
Math.Ceiling(myValue * 20) / 20
Есть ли способ округлить десятичное значение до его ближайшего значения 0,05 в .Net?
Пример:
7.125 → 7.15
6.66 → 6.7
Если его теперь доступно, кто-нибудь может предоставить мне algo?
Как насчет:
Math.Ceiling(myValue * 20) / 20
Используйте это:
Math.Round(mydecimal / 0.05m, 0) * 0.05m;
Та же логика может использоваться в T-SQL:
ROUND(@mydecimal / 0.05, 0) * 0.05
Я предпочитаю этот подход к выбранному ответу просто потому, что вы можете прямо видеть используемую точность.
Что-то вроде этого должно работать на любой шаг, а не только на 0,05:
private decimal RoundUp (decimal value, decimal step)
{
var multiplicand = Math.Ceiling (value / step);
return step * multiplicand;
}
Math..::. Round Method (Decimal, Int32, MidpointRounding)
Устанавливает значение с плавающей запятой с двойной точностью в указанное количество дробных цифр. Параметр указывает, как округлить значение, если оно находится на полпути между двумя другими номерами.
Math.Round(1.489,2,MidpointRounding.AwayFromZero)
Дублированный здесь и здесь для ruby и python. Это не должно быть слишком разным.