2010-02-02 44 views
14

Tôi muốn thực hiện một thao tác như sau: nếu các số phao đã cho giống như 1.0, 2.0, 3.0, tôi muốn lưu chúng vào cơ sở dữ liệu dưới dạng số nguyên (1,2,3), nếu chúng như 1.1, 2.1,, 3.44, tôi lưu chúng dưới dạng float. giải pháp tốt nhất cho vấn đề này khi sử dụng java là gì? Trường tương ứng trong cơ sở dữ liệu là loại varchar.Java chuyển đổi float thành số nguyên

+0

Điều này thực sự khó hiểu; bạn đang hỏi làm thế nào để sử dụng Float.toString (val)? – Will

+0

Bạn có chắc chắn rằng các số dấu phẩy động thực sự phù hợp nhất với miền sự cố của bạn không? Nếu bạn muốn độ chính xác, bạn nên sử dụng BigDecimal –

Trả lời

19

Chỉ cần thử int i = (int) f;.

EDIT: Tôi thấy điểm trong câu hỏi. Mã này có thể làm việc:

int i = (int) f; 
String valToStore = (i == f) ? String.valueOf(i) : String.valueOf(f); 
+1

Điều này sẽ chuyển đổi tất cả các giá trị float thành ints, mà không thực sự là những gì câu hỏi ban đầu đã được yêu cầu. –

+1

những gì về chuỗi nổi, anh chàng? bạn chuyển đổi một phao sang int. đây không phải là điều tôi muốn. – Sawyer

+1

Thực ra điều này hoạt động tốt: nó không chuyển đổi tất cả các giá trị float thành ints. Nó lưu trữ giá trị int trong "i" chỉ để so sánh với giá trị float. Nếu nó giống nhau (tức là nó kết thúc bằng .0) thì nó trả về "i", ngược lại nó trả về giá trị ban đầu dưới dạng Chuỗi ... @Tony, valToStore là một Chuỗi. Đây là những gì bạn yêu cầu ... – Philippe

5
String result = "0"; 
if (floatVar == Math.floor(floatVar)) { 
    result = Integer.toString((int) floatVar); 
} else { 
    result = Float.toString(floatVar); 
} 

Các if-khoản kiểm tra xem số là một số nguyên - ví dụ: nếu nó là tương đương với kết quả của làm tròn xuống đến toàn bộ giá trị gần nhất.

Nhưng đây thực sự là yêu cầu rất kỳ quặc, và có lẽ bạn nên xem xét lại nhu cầu cho một điều như vậy.

+3

Ông đã yêu cầu một chuỗi số nguyên, do đó, dòng chuyển đổi sang một int nên được một cái gì đó dọc theo các dòng của String str = Integer.tostring ((int) floatVar); –

+0

ah, vâng, đã bỏ lỡ phần "chuỗi số nguyên". cảm ơn – Bozho

+0

cảm ơn, nhưng tôi không nghĩ rằng điều này là nhanh chóng. – Sawyer

0

Không chắc đây là giải pháp tốt nhất, nhưng bạn có thể cố gắng để viết một phương pháp như thế này:

String convertToString(Float f) { 
    if (f.toString().endsWith(".0")) 
     return f.intValue().toString(); 
    else 
     return f.toString(); 
} 
1

Có vẻ như bạn muốn lưu Floats không có số dấu như số nguyên, trong khi tiết kiệm những người có dấu đáng kể số như Floats. Tôi thà chỉ cần lưu nó tất cả như phao để DB, nhưng đó là câu hỏi của bạn vì vậy đây là câu trả lời của tôi:

/** 
    * Method to determine if trailing numbers are significant or not. Significant 
    * here means larger than 0 
    * 
    * @param fFloat 
    * @return 
    */ 
    public static boolean isTrailingSignificant(Float fFloat) 
    { 
    int iConvertedFloat = fFloat.intValue();// this drops trailing numbers 
    // checks if difference is 0 
    return ((fFloat - iConvertedFloat) > 0); 
    } 

Đây là cách bạn sẽ sử dụng phương pháp này:

Number oNumToSave = null; 
if (isTrailingSignificant(fFloat)) 
{ 
    // save float value as is 
    oNumToSave = fFloat; 
} 
else 
{ 
    // save as int 
    oNumToSave = fFloat.intValue();// drops trailing numbers  
} 

Sau đó, bạn có thể thực hiện thao tác cơ sở dữ liệu bằng biến oNumToSave.

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