2014-04-16 3 views
0

은 Float가 특정 값보다 작은 지 확인하는 조건을 평가하는 동안 이상한 동작을 경험합니다.동일한 값에 대해 evaulating 연산자보다 작음

String s = "3700.7777"; 

    System.out.println(Float.parseFloat(s)); 

    if(Float.parseFloat(s) < 3700.7777){ 

     System.out.println("Hi"); 

    } 

's'의 값이 조건의 값과 같더라도 코드는 여전히 "Hi"를 인쇄합니다. 작음 연산자를 사용하고 있으므로 3700.7777 이상의 값에 대해서는 조건이 실패하고 "안녕"이 인쇄되지 않습니다.

무엇이 여기에 있습니까? 어떤 도움이 필요합니까?

+2

'3700.7777'은 '이중'입니다. 편집 : 당신이 극도로 조심하고 그들이 어떻게 작동하는지 정확히 알지 못한다면 부동 소수점 숫자가 같은지 테스트하지 않아야합니다. (당신은 그렇지 않습니다. 그렇지 않습니다. 그리고 대다수의 프로그래머는 그렇지 않습니다.) – immibis

+0

"* 's'의 값이 조건 *"=>의 값과 같더라도? – assylias

+1

check는'if (Float.parseFloat (s) == 3700.7777f)'조건에서 작동하고 있습니까? – Himanshu

답변

1

f 리터럴을 float 값으로 처리하여 추가하십시오. 이제이 번호를 double

if (Float.parseFloat(s) < 3700.7777f) { 

      System.out.println("Hi"); 

} 
0

으로 처리합니다. Float 대신 Double을 사용합니다. 이것은 내 문제를 해결합니다.

String s = "3700.7777"; 

    System.out.println(Double.parseDouble(s)); 

    if(Double.parseDouble(s) < 3700.7777){ 

     System.out.println("Hi"); 

    } 
관련 문제