2012-05-04 31 views
11

Aşağıdaki işlev, paylaşılan değerler, ağırlık ve yükseklikten iki değer alır ve bunları BMI, hesaplamak için kullanırım. Değerlerin içeriğini yazdığımda, paylaştığım değerleri iyi paylaşır (iyi), ancak sonra Onlara bir bölme işlemi çalıştırdığımda, sonuç olarak her zaman 0 alırım .. Hata nerede?Bölümü her zaman sıfır (0) ile sonuçlanır?

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

alırsınız Tamsayı bölümü yapıyorsunuz. Kayan nokta yapmak için 1.0 ile çarpın. –

cevap

38

Sen tamsayı bölünme yapıyoruz.

Bir işleneni double'a göndermeniz gerekir.

12

Bir tamsayı bölümü yapıyorsunuz, değerleri float'a döküyorsunuz ve bmi değişkeninin veri türünü float olarak değiştirin. Bunun gibi

:

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

Ayrıca float için yöntemin public int computeBMI() dönüş türünü değiştirmek gerekir.

this stackoverflow sorusunu okumanızı öneririm.

Here Tam açıklamayla birlikte Java'da İlkel Veri Türleri'un bir listesi var.

Umut eder!

+0

neden yüzer ve iki değil? – Ungeheuer

+0

gereksinimlerinize ve bu değeri saklarken ne tür bir hassasiyete ihtiyaç duyduğunuza bağlıdır. @JohnnyCoder –

+0

Ancak bazı durumlarda float yeterli olabilir –

1

bmi bir tam sayı olduğundan. Ya kayan nokta sayıları olarak bmi veya Weight, Height bildirin. Bir bölümdeki tam sayıları kullandığınızda, tamsayı bölümü alacaksınız. Çiftler/şamandıralar kullandığınızda, kayan nokta bölümlemesi

İlgili konular