2013-01-25 41 views
6

Trong cơ sở dữ liệu của tôi, tôi có một vài trường "thực".không thể chuyển đổi từ đôi sang phao

Heres cấu trúc:

database.execSQL("create table " + TABLE_LOGS + " (" 
      + COLUMN_ID + " integer primary key autoincrement," 
      + COLUMN_ID_DAY_EXERCISE + " integer not null," 
      + COLUMN_REPS + " integer not null" 
      + COLUMN_WEIGHT + " real not null" 
      + COLUMN_1RM + " real not null" 
      + COLUMN_DATE + " integer not null" 
      + ")"); 

Bây giờ những gì tôi đang cố gắng làm là tính toán 1RM để tôi có thể chèn nó vào cơ sở dữ liệu.

Đây là chức năng của tôi cho đến nay:

public void createLog(long id_day_exercise, float reps, long weight) { 

    // create 1rm 
    // create date timestamp 

    float onerm = weight/(1.0278-(.0278*reps)); 
    long unixTime = System.currentTimeMillis()/1000L; 
} 

Tôi đang mắc kẹt ở đây. Nó cho tôi lỗi "không thể chuyển đổi từ đôi sang phao" cho onerm. Tôi đã cố gắng đúc trọng lượng như một phao bằng cách sử dụng (Float) ở phía trước của nó, tôi đã cố gắng sử dụng weight.floatValue() và không có gì có vẻ làm việc.

Trả lời

23

Bạn đã thử điều này chưa?

float onerm = (float) (weigth/(1.0278-(.0278*reps))); 
+1

Điều này không hoạt động đối với tôi .. –

2

Vấn đề là loại double có độ chính xác cao hơn float. Bạn sẽ mất thông tin khi bạn thực hiện nhiệm vụ đó. Đó là lý do tại sao trình biên dịch không cho phép bạn làm điều đó. Điều này tương tự như những gì xảy ra khi bạn muốn làm char b = a trong đó a là int.

Sử dụng dàn diễn viên rõ ràng có thể cho phép bạn biên dịch, nhưng mất dữ liệu/chính xác có thể xảy ra.

EDIT:

Vì trong câu hỏi ban đầu của bạn tất cả các nguyên liệu đầu vào để tính toán là floats, literals sử dụng phao. Ví dụ: 1.0278 là chữ gấp đôi. I E. chắp thêm f vào các hằng số sao cho tất cả các tính toán đều nổi và không được tăng gấp đôi:

float onerm = weight/(1.0278f-(.0278f*reps)); 
+0

bạn khuyên bạn nên làm gì sau đó? – scarhand

+0

@scarhand Xem chỉnh sửa, về cách sử dụng các chữ nổi. – frozenkoi

7

Còn cách tiếp cận này thì sao?

Float.valueOf(String.valueOf(your_double_variable)); 
1

Như một câu trả lời tổng quát hơn để tiêu đề (nhưng không phải là nội dung cụ thể) của câu hỏi, đúc từ một đôi để một phao có thể được thực hiện như thế này:

double d = 1.2; 
float f = (float) d; 

Hoặc nếu bạn chỉ cần thể hiện 1.2 làm phao để bắt đầu, sau đó sử dụng 1.2f.

Note

  • float là chính xác đơn 32-bit và double là đôi độ chính xác 64-bit, do đó nó có thể mất độ chính xác trong việc chuyển đổi. Xem primitive data types documentation.
Các vấn đề liên quan