我正在寻找以下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#编码获得相同的值?
答案 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(一旦你将它们视为双打)是正确的:
修改强>
根据您的评论,您要围绕等式的第一部分舍入以使用整数部分。
您可以使用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是否会改变。