相同的Excel公式在Visual Studio C#中返回不同的结果

我正在翻译我的C#应用​​程序中的Excel公式,但它在Visual Studio中返回不同的结果。 这是公式(我已经用Excel和Visual Studio中的值对variables进行硬编码以用于debugging):

LSBT = (0.085 - (0.0023 * (28 * (((4400 - 3600) / 63) - 12.857)))); 

在Excel中使用时,它将返回:

 0.095213022 

并在Visual Studio中返回:

 0.14019079999999995 

有任何想法吗?

这个问题是精确度的损失。

在c#中,编写数字文字时,编译器假定您希望将其表示为int ,并且在公式中使用这些文字时,会导致精度损失。 当您按照精度已经降低的值进行倍数或除法时,最终结果可能是WAYYY。

要避免此问题,请将所有数字文字声明为浮点types。 在这个例子中,我用后缀M表示它们,使它们变成decimalvariables。

 public class Program { public static void Main() { var a = (0.085 -( 0.0023*(28*(((4400 - 3600)/63)-12.857)))); var b = (0.085M -( 0.0023M*(28M*(((4400M - 3600M)/63M)-12.857M)))); Console.WriteLine(a); Console.WriteLine(b); } } 

输出:

 0.1401908 0.0952130222222222222222222222 

DotNetFiddle上的代码