在Java中将数字提升到一个幂

时间:2012-01-12 21:12:42

标签: java

这是我的代码。由于某种原因,我的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);
    }
}

9 个答案:

答案 0 :(得分:106)

java中的

^并不意味着提升权力。这意味着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);

因为height100都是整数,所以在分割时你可能会得到错误的答案。但是,100.0是双倍的。我建议你也weight加倍。此外,^运算符不适用于权限。请改用Math.pow()方法。

答案 3 :(得分:4)

^不是您想要的运营商。您正在寻找powjava.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"));