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
。