Excel公式转换为C#不会给出相同的结果

我在Excel中有一个公式

SUM((((25+273))/((40+273))*((688.00*1.001)+101.325))-101.325)-8.46 

这个公式给了我一个642.36的答案

我把这个公式转换成了下面的c#函数

 public decimal CalculateBaselinePressure(decimal baselineTemperature, decimal knownTemperature, decimal knownPressure) { return (baselineTemperature + 273) / (knownTemperature + 273) * (((knownPressure * 1.001m) + 101.325m) - 101.325m) -8.46m; } 

这给了我一个647.22378274760383386581469649M的答案

任何想法为什么公式没有给出相同的答案。

你的括号有所不同。 这是Excel公式的一个简化但同等版本:

 (a+273) / (b+273) * (c*1.001 + 101.325) - 101.325 - 8.46 

这就是你的C#expression式分解到的

 (a+273) / (b+273) * ((c*1.001 + 101.325) - 101.325) - 8.46; 

乘法之后需要删除一组括号。 你也应该使用double而不是decimal

 public static double CalculateBaselinePressure( double baselineTemperature, double knownTemperature, double knownPressure) { return (baselineTemperature + 273) / (knownTemperature + 273) * ((knownPressure * 1.001d) + 101.325d) - 101.325d - 8.46d; } 

Excel内部使用双精度浮点数,只需在所有variables和常量的C#代码中使用double而不是decimal