转换为c#的Excel公式没有给出相同的结果

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;

乘法后需要删除一组括号。另外,您可能应该使用double,而不是decimal

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代码中使用double而不是decimal