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