Zaokrąglanie podwójnych wartości w C #

Chcę metodę zaokrąglania na podwójne wartości w C #. Musi być w stanie zaokrąglić podwójną wartość do dowolnej wartości precyzji zaokrąglania. Mój kod na wyciągnięcie ręki wygląda tak:

public static double RoundI(double number, double roundingInterval) {

    if (roundingInterval == 0.0)
    {
        return;
    }

    double intv = Math.Abs(roundingInterval);
    double sign = Math.Sign(number);
    double val = Math.Abs(number);

    double valIntvRatio = val / intv;
    double k = Math.Floor(valIntvRatio);
    double m = valIntvRatio - k;

    bool mGreaterThanMidPoint = ((m - 0.5) >= 1e-14) ? true : false;
    bool mInMidpoint = (Math.Abs(m - 0.5) < 1e-14) ? true : false;
    return (mGreaterThanMidPoint || mInMidpoint) ? sign * ((k + 1) * intv) : sign * (k * intv);
}

Zatem RoundI (100, 3) powinien dać 99, a RoundI (1,2345, 0,001) powinien dać 1,235.

Problem polega na tym, że RoundI (1,275, 0,01) zwraca 1,27, a nie 1,28. Dzieje się tak, ponieważ podczas wykonywania podwójnego valIntvRatio = val / intv, czyli podwójnego valIntvRatio = 1,275 / 0,01, daje to 0.12749999999999. Wiem, że jest to problem z podwójną reprezentacją w dowolnym języku programowania. Moje pytanie brzmi: czy istnieje standardowy kod do wykonywania takich czynności, bez potrzeby martwienia się o precyzję na podwójnym? Tutaj ustawiam tolerancję na 1e-14, ale to jest zbyt restrykcyjne dla tego problemu i nie wiem, jaka jest właściwa tolerancja do ustawienia. Dziękuję za pomoc.

questionAnswers(4)

yourAnswerToTheQuestion