Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel函数舍入(数字,num_位)在C#中的等效值是什么?_C#_.net_Rounding - Fatal编程技术网

Excel函数舍入(数字,num_位)在C#中的等效值是什么?

Excel函数舍入(数字,num_位)在C#中的等效值是什么?,c#,.net,rounding,C#,.net,Rounding,正如标题所示,我需要一个C#等价的舍入 例如,如果以图13.608000为例,我要查找的输出是13.60 我似乎找不到任何能完全涵盖我所追求的内容的内容。Math.Round函数应该可以做到这一点,您可以执行以下操作: var rounded = Math.Floor(13.608000 * 100) / 100; 请注意,Math.Floor()向下舍入到最接近的整数,因此需要乘法、向下舍入,然后除以。要向下舍入,请使用Math.Floor。若要四舍五入到不同于1.0的因子,请在调用楼层之前

正如标题所示,我需要一个C#等价的舍入

例如,如果以图13.608000为例,我要查找的输出是13.60


我似乎找不到任何能完全涵盖我所追求的内容的内容。

Math.Round函数应该可以做到这一点,

您可以执行以下操作:

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

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

要向下舍入,请使用Math.Floor。若要四舍五入到不同于1.0的因子,请在调用楼层之前乘以,然后除以

double x = 0.01 * Math.Floor(100 * y);
解决方法:

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

下面是Excel函数的一个直接端口,用于可变的小数位数

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

e、 g.四舍五入(13.608000,2)=13.60,四舍五入(12345,-3)=12000,

以下是正确的解决方案:

    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的答案几乎是正确的,他只是没有考虑负值的舍入。

此方法的行为遵循IEEE标准754第4节。这种舍入有时被称为舍入到关于舍入的最近问题。不完全是这样,因为它并不总是舍入。这与Excel中的舍入不同,Excel中的舍入似乎将-ve值向上舍入到零,例如-2.55变为-2,此函数将从-2.55舍入到-3。如果您使用的是角度分母管,这就是后端等效计算所需的。