Java中的除法总是得到零(0)的结果吗?

17
下面的函数从SharedPreferences获取两个值,体重和身高,并使用它们计算BMI。当我打印这些值的内容时,我得到了我在SharedPreferences中输入的值(这很好),但是当我对它们进行除法运算时,我总是得到0作为结果...问题出在哪里?
public int computeBMI(){
    SharedPreferences customSharedPreference = getSharedPreferences(
            "myCustomSharedPrefs", Activity.MODE_PRIVATE);

    String Height = customSharedPreference.getString("heightpref", "");
    String Weight = customSharedPreference.getString("weightpref", "");

    int weight = Integer.parseInt(Weight);
    int height = Integer.parseInt(Height);
    Toast.makeText(CalculationsActivity.this, Height+" "+ Weight , Toast.LENGTH_LONG).show();

    int bmi = weight/(height*height);
    return bmi;

}

你正在进行整数除法。将其乘以1.0以使其成为浮点数。 - Paul Tomblin
3个回答

55

您正在进行整数除法。

您需要将其中一个操作数强制转换为double类型。


23

你正在进行整数除法,将值强制转换为 float 并将变量 bmi 的数据类型更改为 float

像这样:

float bmi = (float)weight/(float)(height*height);
你还应该将方法public int computeBMI()的返回类型更改为float
我建议你阅读这个stackoverflow问题。
这里,你可以找到Java中所有原始数据类型的完整描述。
希望对你有所帮助!

为什么使用float而不是double? - Ungeheuer
取决于您的需求以及在存储该值时需要的精度类型。@JohnnyCoder - Cacho Santa
但是对于某些情况来说,浮点数可能已经足够了。 - Cacho Santa

2

因为 bmi 是一个整数。要么将 bmi 或者 Weight, Height 声明为浮点数。当你在除法中使用整数时,你会得到整数除法。当你使用双精度/浮点数时,你会得到浮点除法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接