2012-05-04 4 views
11

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

} 
+0

整数の除算をしています。 1.0を掛けて浮動小数点にします。 –

答えて

38

あなたは整数除算をやっています。

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

12

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

は:

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

またfloatにあなたの方法public int computeBMI()の戻り値の型を変更する必要があります。

this stackoverflowの質問をお読みください。

Here Javaのプリミティブデータ型の一覧があります。

希望すると助かります!

+0

なぜ浮動とダブルではない? – Ungeheuer

+0

はニーズに依存し、その値を格納するときに必要な精度はどれですか@JohnnyCoder –

+0

しかし、フロートでは場合によっては十分かもしれません –

1

bmiは整数です。 bmiまたはWeight, Heightを浮動小数点として宣言してください。ある部門で整数を使うと、整数の除算が得られます。 double/floatを使うと、浮動小数点の除算が得られます