如何在Java中格式化包含指数的复杂公式

如何在Java中格式化包含指数的复杂公式,java,formulas,exponent,temperature,Java,Formulas,Exponent,Temperature,更新:好的,现在一切都好了。我知道我做错了什么。在公式中,rH(相对湿度)应以百分比表示,即“30%”。分配所需的输入格式为十进制百分比,即“.30”。这么简单的修复,我甚至没有看到。我一直输入0.30,但没有将其转换为整个百分比。所以我用一个简单的.30*100修正了这个问题。谢谢大家帮助我,我不知道我是否能勾选所有答案,所以我只选了一个 我正试图写一个代码来计算露点。我的代码可以工作,但是我使用的公式太简单了,我无法得到准确的答案。我发现了一个更高级的公式,它相当长,它包括一些指数。我一直在

更新:好的,现在一切都好了。我知道我做错了什么。在公式中,rH(相对湿度)应以百分比表示,即“30%”。分配所需的输入格式为十进制百分比,即“.30”。这么简单的修复,我甚至没有看到。我一直输入0.30,但没有将其转换为整个百分比。所以我用一个简单的.30*100修正了这个问题。谢谢大家帮助我,我不知道我是否能勾选所有答案,所以我只选了一个

我正试图写一个代码来计算露点。我的代码可以工作,但是我使用的公式太简单了,我无法得到准确的答案。我发现了一个更高级的公式,它相当长,它包括一些指数。我一直在试图找到如何正确格式化它,到目前为止,我唯一能找到的是math.pow方法,我认为它对于这个问题来说太简单了。当然,我可能错了,因为我只使用java大约两周

所讨论的公式是:

上止点=(Tc-(14.55+0.114*Tc)*(1-(0.01*RH))-((2.5+0.007*Tc)*(1-(0.01*RH))^3-(15.9+0.117*Tc)*(1-(0.01*RH))^14)

这两个指数是^3和^4。我将如何用java编写它?正如我所说,这个程序确实有效,这是一个格式化公式的简单问题。谢谢

编辑:我找到这个公式的网站是


它大约在这一页的中间。它确实显示^14,而不是4。一开始我没有注意到这一点,我会仔细检查哪一个有效。

指数是用
数学
库完成的。特别是
Math.pow(a,b)

此外,我将把方程的组成部分分成更小的变量,这些变量是有意义的。然后将各部分合并到最终方程式中


例如:
双端tc1=14.55+(0.114*Tc);//不要使用此名称,按照您的建议为他们指定有意义的名称,使用
Math.pow
函数:

    double tdc = Tc -
            (14.55 + 0.114 * Tc) * (1 - (0.01 * RH)) -
            Math.pow(((2.5 + 0.007 * Tc) * (1 - (0.01 * RH))), 3) -
            (15.9 + 0.117 * Tc) * Math.pow((1 - (0.01 * RH)), 14);

14 as指数非常不寻常,但根据“Linsley et al.(1989)”似乎是正确的

如果使用局部变量,则应使用小写名称

最后,您可以定义一个等于
1-0.01*rh
的temp变量,因为您一行使用它三次:

double tc = 23; // just an example
double rh = 67; // just an example
double rh2 = 1 - (0.01 * rh);
double tdc = tc - (14.55 + 0.114 * tc) * rh2 -
        Math.pow((2.5 + 0.007 * tc) * rh2, 3) -
        (15.9 + 0.117 * tc) * Math.pow(rh2, 14);

我想这样:

double tdc = tc - (14.55 + 0.114 * tc) * (1 - (0.01 * rh))
                - Math.pow((2.5 + 0.007 * tc) * (1 - (0.01 * rh)), 3)
                - (15.9 + 0.117 * tc) * Math.pow(1 - (0.01 * rh), 14);
但是,它确实显示了公式中的两个潜在错误:

  • 第二个指数真的应该是14,而不是4吗
  • 第二个指数的乘数表达式真的应该在指数之外吗
也许(?)正确的公式是这样的,对齐以显示公式的模式:

double tdc = tc -          (14.55 + 0.114 * tc) * (1 - (0.01 * rh))
                - Math.pow(( 2.5  + 0.007 * tc) * (1 - (0.01 * rh)), 3)
                - Math.pow((15.9  + 0.117 * tc) * (1 - (0.01 * rh)), 4);


这也表明子表达式
(1-(0.01*rh))
可以预先计算,就像它一样。

我想你已经回答了你自己的问题。Math.pow(double,double)是将值提升为指数的方法。你的意思是
^4
,而不是
^14
,对吗?我正要问你如何格式化,但有人在下面展示了它。谢谢你的回答。我只是不认为我可以把一个方程式放在里面,我认为它必须是一个单一的数字。就像我说的,我对这个很陌生,所以我还不知道我能做多少。啊,好的。我不确定我是否能像那样把一个完整的方程放进去,我想它只适用于一个整数或两个整数。谢谢。很高兴我能帮上忙。我不知道。我稍后会试试看这是否有效,因为代码在另一台计算机上,我无法处理它。我之前不是投了反对票,但我现在投了反对票,因为这不是同一个公式。Exponent具有最高优先级,因此在
pow()调用中有太多的调用,例如,请参见。谢谢,我将尝试一下。现在无法处理它,因为代码在另一台计算机上。我从网站上获得的公式实际上显示为14,而不是4。这是我第一次看到任何以14为指数的公式,但谁知道呢?你有推荐人吗?我把网站链接放在上面的原始帖子里。但在这里,我仍然把它放在剪贴板上,到目前为止,你的版本已经取得了最大的成功。我仍然无法复制给我的例子,但它更接近。我会继续努力的。现在可能在别的地方搞砸了。如果需要的话,我会发布完整的代码,但这是一个家庭作业,我想自己做尽可能多的事情。如果有机会,我会看看它是如何工作的,代码在另一台计算机上。事实上,该网站显示的是14而不是4。我会尽快再检查一遍。我真的很喜欢这种对齐方式,它使解析公式更容易。好的,我按照你们两人的建议做了,简化并更改了第二个乘数。正如我在下面的评论中所说,这几乎但不完全有效。一定是别的地方数学不好。我输入华氏度(家庭作业所需),然后转换成摄氏度,做露点公式,然后把答案转换回华氏度。我第一次使用的简单版本仍然给了我最接近正确的答案。