相同的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
表示它们,使它们变成decimal
variables。
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上的代码