用Java提高数字


75

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

23
这不是您要查找的运算符。
Malfist 2012年

6
@Malfist在阅读您写的内容时,我可以看到您像绝地一样在他的面前挥舞着自己的手
John Vint 2012年

Answers:


140

^在Java中并不意味着提高能力。这意味着XOR。

您可以使用Java的 Math.pow()


您可能要考虑使用double代替int-即:

double height;
double weight;

请注意199/100计算结果为1。


3
我知道,我知道做错事情一定很简单。谢谢。

2
@stytown:如果解决了问题,您应该接受答案。
unholysampler 2012年

在这种情况下,可能就可以了,因为对于严重缺陷的BMI算法而言,准确性并不重要,可悲的是仍在使用。当您确实需要十进制精度时,最好使用BigDecimal,因为它不会遇到二进制浮点数固有的从二进制到十进制的转换错误,因为它使用的是十进制而不是二进制缩放。
Infernoz

32

我们可以用

Math.pow(2, 4);

这意味着2等于4的幂(2 ^ 4)

答案= 16


3
实际上,当您只需要2的幂时,请使用位移:1<<4 = 16
Xerus

如果性能很关键,我只会使用移位。否则,它只会使代码更难阅读。
Paul Wintz,

8

您的计算可能是罪魁祸首。尝试使用:

bmi = weight / Math.pow(height / 100.0, 2.0);

因为height100都是整数,所以除法时可能会得到错误的答案。但是,100.0是双重的。我建议你也weight加倍。同样,^操作员也不是权力。请改用该Math.pow()方法。


1
谢谢。因此,当我输入10和10作为体重和身高时,它不再给我1000,而是给我999.9999。不过,现在看来效果要好得多。bmi =体重/ Math.pow(身高/100.00,2.00);
stytown 2012年

1
这取决于您的double价值观的准确性。如有必要,您始终可以将舍入作为计算的最后一步。
伯纳德

谢谢伯纳德,我会调查一下。
stytown 2012年

5

^不是您想要的运算符。您正在寻找的pow功能java.lang.Math

您可以使用 Math.pow(value, power)

例:

Math.pow(23, 5); // 23 to the fifth power

3

当然,对于OP来说为时已晚,但是仍然...将表达式重新排列为:

int bmi = (10000 * weight) / (height * height)

消除所有浮点,并将常数除法转换为乘法,乘法应执行得更快。整数精度可能足以满足此应用程序的要求,但是如果不是,则:

double bmi = (10000.0 * weight) / (height * height)

仍然会有所改善。


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

2

您应该使用以下方法-

Math.pow(double a,double b)

返回提高到第二个参数的幂的第一个参数的值。


0

1)我们通常不使用int数据类型来表示高度,重量,距离,温度等(可以有小数点的变量),因此高度,重量应为double或float。但是当您有更多小数点时, double比float更为准确

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)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.