2017-02-03 84 views
1

更新:好的,现在一切正常。我知道我做错了什么。在该公式中,rH(相对湿度)应该是百分比,即“30%”。所需的输入格式为百分比,即“.30”。这种简单的修复,我甚至没有看到它。我一直在输入.30而没有将其转换为整个百分比。所以我用一个简单的.30 * 100来解决这个问题。谢谢大家帮助我,我不知道我是否可以做所有答案的复选标记,所以我只选了一个。如何格式化包含Java中指数的复杂公式

我想写一个代码来计算露点。我的代码可行,但我使用的公式太简单了,我无法得到准确的答案。我找到了一个更高级的公式,这个公式很长,并且包含了一些指数。我一直在试图找出如何正确格式化它,到目前为止,我唯一能找到的就是math.pow方法,我认为这个问题太简单了。当然,我可能是错的,因为我只用了大约两周的时间。

在问题的公式为:

TDC =(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中?正如我所说的,该程序确实有效,这是格式化公式的一个简单问题。谢谢。

编辑:哪里,我发现这个公式网站是http://www.angelfire.com/ok5/orpheus/metcal.html

它是在对页面的中间。它确实显示^ 14,而不是4。我一开始并没有注意到,我会仔细检查一下看哪一个是有效的。

+1

'Math.pow()'... – Brendan

+0

我想你已经回答了你自己的问题。 Math.pow(double,double)是将值提升为指数的方法。 –

+0

你的意思是'^ 4',而不是'^ 14',对吧? –

回答

0

14指数是极不寻常,但似乎根据是正确的 “林斯利等人(1989)”。

如果您正在使用局部变量,则应使用小写名称。

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); 
+0

谢谢,我会试试这个。由于代码位于另一台计算机上,因此无法对其进行处理。 –

+0

我从公式得到的网站确实显示14,而不是4.我会仔细检查。 –

+0

这是我第一次看到任何以14为指数的公式,但谁知道?你有参考吗? –

1

指数通过Math库来完成。特别地Math.pow(a, b)

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#pow-double-double-

此外,我想你的公式的组成部分分割成更小的变量是有意义的。然后将这些部分组合到您的最终方程中。

例:double termTc1 = 14.55 + (0.114 * Tc); // Do not use this name, give them meaningful names

+0

我会看到这是如何工作的,当我有机会,代码是在另一台计算机上。 –

1

正如你所说,使用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); 
+0

啊,好的。我不确定是否可以将整个公式放在那里,我认为它只能用一个整数或两个整数。谢谢。 –

+0

很高兴我能帮上忙。 – user152468

+0

为什么它被低估? – user152468

1

我会格式化这样的:

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); 

但它确实显示两个

最后,由于您使用三次连续你可以定义一个临时变量等于1 - 0.01 * rh您公式中的潜在错误:

  • 第二个指数是否应该是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))可以预先计算,像answer by Eric Duminil做到了。

+0

其实,网站确实显示14而不是4.我会尽快检查一下。 –

+0

我真的很喜欢这种对齐方式,它使得解析公式变得更容易。 –

+0

好吧,我继续按照你们两个人建议,简化和改变第二个乘数的方式去做。正如我在下面的评论中所说的,这几乎不起作用。它在其他地方必须是不好的数学。我输入华氏温度(作业所需),然后转换成摄氏温度,做露点公式,然后将该答案转换回华氏度。尽管我最初使用的简单版本仍然给我最接近正确的答案。 –