如何格式化包含 Java 中的指数的复杂公式
How to format a complicated formula that includes exponents in Java
更新:好的,现在一切正常。我弄清楚我做错了什么。在公式中,rH(相对湿度)应该是百分比,即“30%”。分配所需的输入格式是小数百分比,即“.30”。如此简单的修复,我什至没有看到它。我一直输入 .30 而没有将其转换为整数百分比。所以我用一个简单的 .30 * 100 修复了它,它就在那里。谢谢大家的帮助,不知道能不能把所有的答案都勾上,所以就挑了一个。
我正在尝试编写代码来计算露点。我的代码有效,但我使用的公式太简单了,我无法得到准确的答案。我找到了一个更高级的公式,它很长,而且包含了一些指数。我一直在尝试找出如何正确格式化它,到目前为止我唯一能找到的是 math.pow 方法,我认为它对于这个问题来说太简单了。当然,我可能是错的,因为我只使用 java 大约两周。
有问题的公式是:
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。我一开始没听清楚,我会仔细检查看看哪个有效。
指数是用 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
正如您所建议的那样,使用 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 作为指数非常不寻常,但根据 "Linsley et al. (1989)"
似乎是正确的
如果您使用的是局部变量,则应使用小写名称。
最后,您可以定义一个等于 1 - 0.01 * rh
的临时变量,因为您连续使用它三次:
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))
可以预先计算,就像 那样。
更新:好的,现在一切正常。我弄清楚我做错了什么。在公式中,rH(相对湿度)应该是百分比,即“30%”。分配所需的输入格式是小数百分比,即“.30”。如此简单的修复,我什至没有看到它。我一直输入 .30 而没有将其转换为整数百分比。所以我用一个简单的 .30 * 100 修复了它,它就在那里。谢谢大家的帮助,不知道能不能把所有的答案都勾上,所以就挑了一个。
我正在尝试编写代码来计算露点。我的代码有效,但我使用的公式太简单了,我无法得到准确的答案。我找到了一个更高级的公式,它很长,而且包含了一些指数。我一直在尝试找出如何正确格式化它,到目前为止我唯一能找到的是 math.pow 方法,我认为它对于这个问题来说太简单了。当然,我可能是错的,因为我只使用 java 大约两周。
有问题的公式是:
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。我一开始没听清楚,我会仔细检查看看哪个有效。
指数是用 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
正如您所建议的那样,使用 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 作为指数非常不寻常,但根据 "Linsley et al. (1989)"
似乎是正确的如果您使用的是局部变量,则应使用小写名称。
最后,您可以定义一个等于 1 - 0.01 * rh
的临时变量,因为您连续使用它三次:
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))
可以预先计算,就像