2010-02-02 3 views
14

다음과 같은 작업을 수행하고자합니다. 주어진 float 번호가 1.0, 2.0, 3.0과 같은 경우 정수 (1,2,3)로 데이터베이스에 저장하려고합니다. 1.1, 2.1,, 3.44처럼 float로 저장합니다. 자바를 사용하여이 문제에 가장 적합한 솔루션은 무엇입니까? 데이터베이스의 해당 필드는 varchar 형식입니다.Java는 float를 정수로 변환합니다.

+0

이것은 정말로 혼란 스럽습니다. Float.toString (val)을 사용하는 방법을 묻고 있습니까? – Will

+0

부동 소수점 숫자가 실제로 문제 도메인에 가장 적합합니까? 정밀도를 원하면 BigDecimal을 사용해야합니다. –

답변

19

그냥 시도하십시오 int i = (int) f;.

편집 : 질문에 요점이 표시됩니다. 이 코드는 작동 할 수 있습니다 : 수가 정수입니다

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

이렇게하면 모든 float 값이 int로 변환됩니다. 원래 질문에서 묻지 않은 값입니다. –

+1

어때요? float를 int로 변환합니다. 이것은 내가 원하는 것이 아닙니다. – Sawyer

+1

실제로 이것은 잘 작동합니다 : 모든 float 값을 int로 변환하지 않습니다. float 값과 비교하기 위해 int 값을 "i"에 저장합니다. 동일하면 (즉 .0으로 끝나는 경우) "i"를 반환하고, 그렇지 않으면 원래 값을 문자열로 반환합니다. @Tony, valToStore는 String입니다. 이것은 당신이 요구 한 것입니다 ... – Philippe

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

은 IF 절 여부를 체크한다 -는 가장 가까운 전체 값으로 내림의 결과와 동일한 경우 즉.

하지만 이것은 매우 이상한 요구 사항이며 아마도 그러한 일의 필요성을 재고해야합니다.

+3

그는 정수 문자열을 요청했기 때문에 int로 변환하는 줄은 String의 줄을 따라야합니다. str = Integer.tostring ((int) floatVar); –

+0

아, 예, "정수 문자열"부분이 누락되었습니다. 덕분에 – Bozho

+0

고마워,하지만이게 빠르다고 생각하지 않아. – Sawyer

0

은 확실하지 않음이 가장 좋은 방법이지만,이 같은 방법을 쓰기를 시도 할 수 있습니다 : 중대한 후행 가진 사람을 저장하는 동안, 정수로 후행 숫자 수레를 저장할 같은

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

가 보인다을 숫자는 수레로 나타납니다. , 그 후

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

수행 할 수 있습니다

/** 
    * 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); 
    } 

이이 방법을 사용하는 방법입니다 : 차라리 그냥 DB에 플로트로 모두를 절약 할 수 있지만, 그래서 여기에 질문 것은 내 대답 oNumToSave 변수를 사용하여 데이터베이스 조작을 수행하십시오.

관련 문제