Excel INT等价物

时间:2015-11-09 10:54:35

标签: c# .net excel

我正在寻找以下Excel公式的C#等价物:

(INT(((4800/1000)/0.415)*2.393)/0.05)

我在Excel中使用上面的公式得到值540,但现在我尝试使用以下代码在C#中执行相同操作:

Math.Round((((4800 /1000) / 0.415) * 2.393) / 0.05, 0)

我得到了值553

如何使用C#编码获得相同的值?

3 个答案:

答案 0 :(得分:5)

这就是你需要的:

(int)(((4800.0 /1000) / 0.415) * 2.393) / 0.05

或者:

(int)((((double)4800 / 1000) / 0.415) * 2.393) / 0.05

问题是4800和1000文字被解释为整数,而在C#中划分两个整数会产生另一个舍入的整数。所以4800/1000 = 4,但你想要4.8。

通过添加.0部分,您隐式将文字转换为double,或者您也可以进行显式转换。将double除以整数已经为你提供了一个双倍。

答案 1 :(得分:2)

你可以试试这个:

using System;

public class Test
{
    public static void Main()
    {
        Console.WriteLine((int)((((double)4800 / 1000) / 0.415) * 2.393) / 0.05);
    }
}

<强> IDEONE DEMO

整数除以整数(4800/1000)会产生一个整数(4),而不是excel结果(4.8),它会得到两倍。所以你需要把它加倍。

答案 2 :(得分:1)

看起来Excel已经完成了答案

((4800 /1000) / 0.415) * 2.393

首先 - 所以这是27,然后当你将它除以0.05时,它会得到540的答案。

至于C#工作...... Konamiman是正确的,有一些int四舍五入。您可以将它们转换为双打或在末尾添加.0以表示这些不是整数:

Math.Round((((4800.0 / 1000.0) / 0.415) * 2.393) / 0.05, 0);

如果你在使用calc时执行此操作,它会显示C#calc(一旦你将它们视为双打)是正确的:

enter image description here

修改

根据您的评论,您要围绕等式的第一部分舍入以使用整数部分。

您可以使用Math.Floor返回小于或等于给定数字的最大整数。

double d = ((4800.0 / 1000.0) / 0.415) * 2.393;
// d = 27.678...
double d1 = Math.Floor(d);
// d1 = 27
double d2 = d / 0.05;
// d2 = 540

注意 - 小心最后一行......如果你使用的除数不是其中倒数是纯整数的除数,你将得不到d2的整数。所以你可能需要在d2上使用Math.Round或Math.Floor来修复它......所有这些都取决于0.05是否会改变。