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

Same Excel formula returns different results in Visual Studio C#

我正在我的 C# 应用程序中翻译一个 Excel 公式,但它 returns 在 Visual Studio 中产生不同的结果。这是公式(我已经用 Excel 和 Visual Studio 中的值对变量进行硬编码以进行调试):

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

在Excel中使用时,它returns:

0.095213022

并且在 Visual Studio 它 returns:

0.14019079999999995

有什么想法吗?

问题是精度损失。

在 c# 中,当您编写数字文字时,编译器假定您希望将其表示为 int,并且当您在公式中使用这些文字时,可能会导致精度损失。当您乘以或除以失去精度的值时,最终结果可能会偏离 WAYYY。

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

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

Code on DotNetFiddle