这是我的代码。由于某种原因,我的BMI计算不正确。
当我在计算器上检查输出时:(10/((10/100)^2)))
我得到1000,但在我的程序中,我得到5.我不确定我做错了什么。这是我的代码:
import javax.swing.*;
public class BMI {
public static void main(String args[]) {
int height;
int weight;
String getweight;
getweight = JOptionPane.showInputDialog(null, "Please enter your weight in Kilograms");
String getheight;
getheight = JOptionPane.showInputDialog(null, "Please enter your height in Centimeters");
weight = Integer.parseInt(getweight);
height = Integer.parseInt(getheight);
double bmi;
bmi = (weight/((height/100)^2));
JOptionPane.showMessageDialog(null, "Your BMI is: " + bmi);
}
}
答案 0 :(得分:106)
^
并不意味着提升权力。这意味着XOR。
您可以使用java的Math.pow()
您可能需要考虑使用double
代替int
- 即:
double height;
double weight;
请注意199/100
评估为1。
答案 1 :(得分:20)
我们可以使用
Math.pow(2, 4);
这意味着2到4的幂(2 ^ 4)
回答= 16
答案 2 :(得分:8)
你的计算可能是罪魁祸首。尝试使用:
bmi = weight / Math.pow(height / 100.0, 2.0);
因为height
和100
都是整数,所以在分割时你可能会得到错误的答案。但是,100.0
是双倍的。我建议你也weight
加倍。此外,^
运算符不适用于权限。请改用Math.pow()
方法。
答案 3 :(得分:4)
^
不是您想要的运营商。您正在寻找pow
的java.lang.Math
功能。
您可以使用Math.pow(value, power)
。
示例:
Math.pow(23, 5); // 23 to the fifth power
答案 4 :(得分:3)
OP当然太迟了,但还是...... 将表达式重新排列为:
int bmi = (10000 * weight) / (height * height)
消除所有浮点,并将除法转换为乘法,这应该更快地执行。对于此应用程序,整数精度可能已足够,但如果不是,则<:p>
double bmi = (10000.0 * weight) / (height * height)
仍然会有所改善。
答案 5 :(得分:2)
int weight=10;
int height=10;
double bmi;
bmi = weight / Math.pow(height / 100.0, 2.0);
System.out.println("bmi"+(bmi));
double result = bmi * 100;
result = Math.round(result);
result = result / 100;
System.out.println("result"+result);
答案 6 :(得分:0)
您应使用以下方法-
Math.pow(双a,双b)
将第一个自变量的值返回第二个自变量的幂。
答案 7 :(得分:0)
1)我们通常不要将int 数据类型用于身高,体重,距离,
温度等(可以带小数点的变量)
因此身高,体重应加倍或浮动。
但是在小数点较多的情况下,
2)而不是^,您可以使用Math.pow()
bmi = (weight/(Math.pow(height/100, 2)));
3)Math.pow()
方法具有以下定义
Math.pow(double var_1, double var_2);
示例:
i)Math.pow(8, 2)
产生64(8等于2的幂)
ii)Math.pow(8.2, 2.1)
的产生量为82.986813689753(8.2的幂为2.1)
答案 8 :(得分:0)
我用 Math.pow(x,2) 和 x*x 做了基准测试, 结果是 Math.pow() 比手动将其自身相乘要慢 40 倍,因此我不建议将其用于需要一点性能的任何地方。
结果如下:
proof_of_work: 19.284756867003345
time for Math.pow(x,2) in ns: 35143
proof_of_work: 19.284756867003345
time for x*x in ns: 884
manual calculation is 39 times faster
这是测试代码
double r1 = 4.391441320;
long multiply_d1 = System.nanoTime();
double multiply_dr = Math.pow(r1,2);
long multiply_d2 = System.nanoTime();
System.out.println(("proof_of_work: ") + (multiply_dr));
System.out.println(("time for Math.pow(x,2) in ns: ") + (multiply_d2 - multiply_d1));
long multiply_t1 = System.nanoTime();
double multiply_tr = r1*r1;
long multiply_t2 = System.nanoTime();
System.out.println(("proof_of_work: ") + (multiply_tr));
System.out.println(("time for x*x in ns: ") + (multiply_t2 - multiply_t1));
System.out.println(("manual calculation is ") + ((multiply_d2 - multiply_d1) / (multiply_t2 - multiply_t1)) + (" times faster"));