Что такое эквивланта функции Excel ROUNDDOWN (число, num_digits) в C #? - PullRequest
3 голосов
/ 20 ноября 2010

Как видно из заголовка, мне нужен C # -эквивалент ROUNDDOWN.

Например, если вы возьмете цифру 13.608000, я получу вывод: 13.60.

Я не могуКажется, что-нибудь находит то, что мне нужно.

Ответы [ 6 ]

8 голосов
/ 20 ноября 2010

Вот прямой порт функции Excel для переменного числа десятичных знаков

public double RoundDown(double number, int decimalPlaces)
{
    return Math.Floor(number * Math.Pow(10, decimalPlaces)) / Math.Pow(10, decimalPlaces);
}

например, RoundDown (13.608000,2) = 13.60, RoundDown (12345, -3) = 12000,

7 голосов
/ 20 ноября 2010

Вы можете сделать следующее:

var rounded = Math.Floor(13.608000 * 100) / 100;

Обратите внимание, что Math.Floor () округляется до ближайшего целого числа, поэтому необходимо умножать, округлять вниз, а затем делить.

2 голосов
/ 30 сентября 2012

Вот правильное решение:

    double RoundDown(double value, int digits)
    {
        if (value >= 0)
            return Math.Floor(value * Math.Pow(10, digits)) / Math.Pow(10, digits);

        return Math.Ceiling(value * Math.Pow(10, digits)) / Math.Pow(10, digits);
    }

Ответ Ричарда W1001 почти правильный, он просто не учел округление отрицательных значений.

0 голосов
/ 20 ноября 2010

Обходной путь:

decimal x = 13.6080001;
int places = 2;
int result = (int)(Math.Round(x - (0.5 * Math.Pow(10, 0 - places), places)));
0 голосов
/ 20 ноября 2010

Для округления используйте Math.Floor.Чтобы округлить до коэффициента, отличного от 1,0, умножьте перед вызовом Floor и затем разделите.

0 голосов
/ 20 ноября 2010

Math.Round функция должна сделать это, http://msdn.microsoft.com/en-us/library/zy06z30k.aspx

...