2012-05-04 1 views
11

아래 함수는 sharedpreferences, weight 및 height에서 두 가지 값을 가져오고 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

당신은 정수 부문을하고 있습니다.

하나의 피연산자를 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/floats를 사용할 때, 부동 소수점 나누기