为什么.Net和Excel不同意这个math?

我有一些奇怪的行为从一些C#和Excel中…

自己做了math,我相信excel可能会给出正确的答案,但我的math不是很好,所以.Net编译器知道我不知道的东西。

所以我们走吧

以excel表格的forms给出这些数据:

total sale val days irr 2431.65 2424.56 21 5.01 

irr(cell D2)的公式如下:

 =ROUND(100 * ((A2 - B2) / B2) * (360 / C2), 2) 

当我运行这个C#时,我得到了结果4.97 …

 var totalIncludingTax = 2431.65M; var saleValue = 2424.56M; var daysRemaining = 21; var result = Math.Round(100.0m * ((totalIncludingTax - saleValue) / saleValue) * (360 / daysRemaining), 2); 

任何人都可以解释我可以如何强制C#/ .Net和Excel同意/我可能会重写这个公式,以便二者同意吗?

 360 / daysRemaining 

这将成为C#中的整数除法:360/21 = 17而不是17.14285714,因为它将在Excel中。

将其更改为360.0 /daysRemaining ,以使其成为浮点操作(或已指出的360m)。