C#中Excel函数ROUND DOWN(number,num_digits)的等价物是什么?

时间:2010-11-19 23:40:20

标签: c# .net rounding

正如标题所示,我需要一个C#equivelant of ROUNDDOWN。

例如,如果您使用图13.608000,我要找的输出是13.60。

我似乎无法找到任何能够完全覆盖我所追求的东西。

6 个答案:

答案 0 :(得分:8)

这是Excel函数的直接端口,用于可变小数位数

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

e.g。 RoundDown(13.608000,2)= 13.60,RoundDown(12345,-3)= 12000,

答案 1 :(得分:7)

您可以执行以下操作:

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

请注意,Math.Floor()向下舍入到最接近的整数,因此需要乘以,向下舍入,然后除以。

答案 2 :(得分:2)

这是正确的解决方案:

    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);
    }

RichardW1001的答案几乎是正确的,他只是没有说明负值的四舍五入。

答案 3 :(得分:0)

要进行四舍五入,请使用Math.Floor。要舍入到1.0以外的其他因子,请在调用Floor之前相乘并在之后进行除法。

double x = 0.01 * Math.Floor(100 * y);

答案 4 :(得分:-1)

Math.Round函数应该这样做,http://msdn.microsoft.com/en-us/library/zy06z30k.aspx

答案 5 :(得分:-1)

解决方法:

decimal x = 13.6080001;
int places = 2;
int result = (int)(Math.Round(x - (0.5 * Math.Pow(10, 0 - places), places)));