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

标签 c# excel visual-studio visual-studio-2013 excel-2013

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

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

在 Excel 中使用时,返回:

0.095213022

在 Visual Studio 中它返回:

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

关于c# - 相同的 Excel 公式在 Visual Studio C# 中返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47257404/

相关文章:

c# - ASP.NET 响应缓冲区中的文件名

c# - 无法从函数访问 Azure Key Vault - 返回禁止

excel - 在使用 VBA 从 Access 自动打开和搜索之前检查打开的 Excel 文件

c# - OpenXML 如何添加指向另一个工作表的超链接

c# - 在 Visual Studio 2015 解决方案中恢复所有 Nuget 包

c# - 这些获取 DTE2 的方法有什么区别(Visual Studio 2013)

vba - 使用 VBA 声明相对于事件单元格的范围

c++ - 什么是数据断点?

C++如何使用参数化构造函数实例化对象?

javascript - Visual Studio 2017 是否支持 _references.js 文件?