web-dev-qa-db-ja.com

Javaの除算は常にゼロ(0)になりますか?

以下の関数は、sharedpreferencesから2つの値、weightとheightを取得し、これらを使用してBMIを計算します。値の内容を出力すると、sharedprefsに入力した値が取得されます(これは適切です)が、実行するとそれらの除算演算では、結果として常に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;

}
14
callback

あなたがやっている整数除算。

1つのオペランドをdoubleにキャストする必要があります。

44
SLaks

整数除算を実行し、値をfloatにキャストし、変数bmiのデータ型をfloatに変更します。

このような:

_float bmi = (float)weight/(float)(height*height);
_

また、メソッドpublic int computeBMI()の戻り値の型をfloatに変更する必要があります。

this stackoverflowの質問を読むことをお勧めします。

ここ Javaの完全な説明とともにプリミティブデータ型のリストがあります。

それが役に立てば幸い!

17
Cacho Santa

bmiは整数だからです。 bmiまたはWeight, Heightを浮動小数点数として宣言します。除算で整数を使用すると、整数除算が得られます。ダブルス/フロートを使用すると、浮動小数点除算が得られます

1
Piyush Mattoo