Округление числа с использованием нестандартных правил - PullRequest
3 голосов
/ 31 октября 2010

Рассмотрим следующий код C #:

Decimal number = new decimal(8.0549);
Decimal rounded = Math.Round(number, 2);
Console.WriteLine("rounded value: {0}", rounded);

будет выдавать результат: 8.05

Алгоритм Math.Round проверяет только следующую цифру после десятичного числа, принятого в качестве параметра.
Мне нужен алгоритм, который проверяет все десятичные цепочки.В этом случае 9 следует округлять с 4 по 5, что, в свою очередь, приводит к округлению с 5 по 6, что приводит к окончательному результату 8.06

Больше примеров:
8.0545 -> 8.06
8.0544 -> 8.05

Есть какой-то встроенный метод, который может мне помочь?
Спасибо.

Ответы [ 2 ]

1 голос
/ 31 октября 2010

Я ожидаю, что если бы для этого был встроенный метод, он уже был бы зарегистрирован как ошибка;)

При этом вы могли бы создать метод, который принимает ваш десятичный код, а также максимальное и минимальное количество мест для округления в обратном порядке, и в цикле сократите его до желаемых мест - т.е. что-то вроде этого:

    private static double NotQuiteRounding(double numToRound, int maxPlaces, int minPlaces) 
{ 
    int i = maxPlaces;
    do
    { 
        numToRound = Math.Round(numToRound,i); 
        i = i - 1;
    } 
    while (i >= minPlaces);

    return numToRound; 
} 

И назовите это так:

    Console.WriteLine(NotQuiteRounding(8.0545,10,2));
    Console.WriteLine(NotQuiteRounding(8.0544,10,2));
1 голос
/ 31 октября 2010

Нет; вам нужно написать это самостоятельно.

...