Excel formula converted to c# not giving the same result
我在Excel中有一个公式
1 | SUM((((25+273))/((40+273))*((688.00*1.001)+101.325))-101.325)-8.46 |
这个公式给了我一个642.36的答案。
我把这个公式翻译成了下面的c函数
1 2 3 4 5 6 7 | public decimal CalculateBaselinePressure(decimal baselineTemperature, decimal knownTemperature, decimal knownPressure) { return (baselineTemperature + 273) / (knownTemperature + 273) * (((knownPressure * 1.001m) + 101.325m) - 101.325m) -8.46m; } |
我的答案是647.223782746038386581469649m。
知道公式为什么不能给出相同的答案吗?
你的括号里有不同之处。这是Excel公式的简化但等效版本:
1 | (a+273) / (b+273) * (c*1.001 + 101.325) - 101.325 - 8.46 |
这就是你的c表达分解为
1 | (a+273) / (b+273) * ((c*1.001 + 101.325) - 101.325) - 8.46; |
乘法后需要删除一组括号。另外,您可能应该使用
1 2 3 4 5 6 7 8 | 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内部使用双精度浮点数,只需在所有变量和常量的C代码中使用