2012-05-04 30 views
11

Hàm dưới đây nhận hai giá trị từ sharedpreferences, weight và height, và tôi sử dụng các giá trị này để tính chỉ số BMI, Khi tôi in nội dung của các giá trị tôi nhận được các giá trị tôi đã nhập vào sharedprefs (tốt) khi tôi chạy một hoạt động phân chia trên chúng, tôi luôn nhận được kết quả là 0 .. Lỗi ở đâu?Phân chia trong Java luôn dẫn đến số không (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

Bạn đang thực hiện phân chia số nguyên. Nhân với 1.0 để làm cho nó nổi điểm. –

Trả lời

38

Bạn đang làm số nguyên chia.

Bạn cần truyền một toán hạng đến double.

12

Bạn đang thực hiện phân chia số nguyên, truyền các giá trị sang float và thay đổi kiểu dữ liệu của biến số bmi thành float.

Như thế này:

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

Bạn cũng nên thay đổi kiểu trả về của phương pháp của bạn public int computeBMI() để float.

Tôi khuyên bạn nên đọc this câu hỏi về lưu lượng truy cập.

Here bạn có danh sách Kiểu dữ liệu nguyên thủy trong Java với mô tả đầy đủ của nó.

Hy vọng điều đó sẽ hữu ích!

+0

lý do tại sao nổi và không tăng gấp đôi? – Ungeheuer

+0

tùy thuộc vào nhu cầu của bạn và loại độ chính xác bạn cần khi lưu trữ giá trị đó @JohnnyCoder –

+0

nhưng phao có thể đủ cho một số trường hợp –

1

bmi là số nguyên. Khai báo bmi hoặc Weight, Height làm số dấu phẩy động. Khi bạn sử dụng các số nguyên trong một bộ phận, bạn sẽ nhận được phân chia số nguyên. Khi bạn sử dụng đôi/phao nổi, bạn sẽ nhận được phân chia dấu phẩy động

Các vấn đề liên quan