Обычная функция RoundUp с базой 10 выглядит следующим образом:
public static decimal RoundUp(this decimal value, int decimals)
{
var k = (decimal)Math.Pow(10, decimals);
return Math.Ceiling((value * k)) / k;
}
, поэтому она работает так:
decimal number = 10.12345m;
number.RoundUp(3) => 10.124
number.RoundUp(2) => 10.13
number.RoundUp(1) => 10.2
etc.
Я хотел бы иметь функцию, которая округляет вверх к ближайшему значению следующим образом:
decimal number = 10.12345m;
number.RoundUp(0.1) => 10.2
number.RoundUp(0.25) => 10.25
number.RoundUp(2.0) => 12
number.RoundUp(5.0) => 15
number.RoundUp(10) => 20
Примечание. Округление по @basis означает, что результат делится на @basis без остатка:
RoundUp(10.12345m, 0.15) => 10.2 check 10.2 / 0.15 = 68
соседи 10,05 и 10,35, поэтому правильное округление 10,12345 составляет 10,2
RoundUp(5, 2.25) => 6.75 check 6.75 / 2.25 = 3
, т.е. 2,25x2 = 4,50 меньше 5. Таким образом, округление 5 на 2,25 будет 6,75
RoundUp(5, 2.50) => 5.0 check 5 / 2.5 = 2