2013-11-10 4 views
3

제목 거의 모든 내용이 ...float의 문자열 표현의 가능한 최대 길이는 얼마입니까?

양식에 입력 된 텍스트의 최대 길이를 적용하려고합니다. 필드 중 하나는 유효한 부동 소수점 숫자가 될 수 있습니다. 최대 길이는 얼마입니까? 정수에 대한 예를 들어

,

// negative sign makes MIN_VALUE larger than MAX_VALUE 
String.valueOf(Integer.MIN_VALUE).length(); 

나는 다음과 같은 테스트 한

UPDATE :

8 
13 
7 
12 
: 나에게 다음과 같은 출력을 제공

String.valueOf(-Float.MIN_VALUE).length(); 
String.valueOf(-Float.MAX_VALUE).length(); 
String.valueOf(Float.MIN_VALUE).length(); 
String.valueOf(Float.MAX_VALUE).length(); 

나는 13이 최대 길이라고 확신하지 않는다.

+0

왜 float 문자열 표현의 문자 수를 확인 하시겠습니까? float를 직접 사용할 수없는 이유는 무엇입니까? – Lokesh

+2

['-Float.MAX_VALUE'] (http://docs.oracle.com/javase/7/docs/api/java/lang/Float.html#MAX_VALUE)? – Maroun

+0

@Lokesh 솔직히 말해서, 나는 ** 필요 없다 **. 나는 현재'Float.valueOf (field.getText())'를 사용하여 그 필드에 대한 입력을 잡는 중이다. 그러나 다른 모든 필드는 최대 길이로 제한되어 있으므로이 필드에 대해 동일한 작업을 수행하기를 바랬습니다. – firyice

답변

4

float 값의 최대 길이는 의미가 없다. 당신은 사용자를 허용하려면 자바로 표현 가능한 모든 float 값을 입력합니다

사업을 기반으로해야 입력 필드에 대한

1000000000000000000000000000000000000000000000000000000000000000 

또는

000000000000000000000000000000000000000000000000000000000.00000000000000000000001 

제한 같은 것은에 필요가 없다 "나는 다른 모든 분야에 한계가 있습니다"와 같은 규칙.

여기에서 "비즈니스"규칙은 지금까지 "구문 분석과 플로트에 저장 될 수있다"또한

입력 길이를 제한하는 것이 종종 더 이상 물건 (컷 & 붙여 넣기를 통해) 입력을 방지주의를 것 같다 일부 편집 후에 만 ​​유효한 입력이됩니다. 따라서 실제로 사용성이 떨어집니다.

+0

3am 생각 과정에서 실수를 저지르는 것을 도와 주셔서 감사합니다. – firyice

1

안정적인 최대 값을 찾을 수있을 때까지 단순히 임의의 값을 테스트하여 반대 예제를 제공 할 수 있습니다. 이 접근법의 가능한 문제점은 국부적 인 최대치 만 발견 할 수 있고 전역적인 최대치가 없다는 것입니다.

이 PC의 결과였다

당신의 -Float.MAX_VALUE에 반대 예이다
Max. float length: 15 (-1.09045365E-32) 

.

때때로 최대 길이가 Float.toString() 인 것을 아는 것이 유용합니다.이 경우이 질문에 답변 할 수 있습니다.

public class FindMaxStringForPrimitive { 

    private static final int MAX_PERIOD = 10000; // Number of iterations before 
               // concluding answer 

    public static void main(String... args) { 
    maxFloatLength(); 
    } 

    private static void maxFloatLength() { 
    final class Test { 
     int r = Integer.MIN_VALUE; 
     Random rnd = new Random(); 
     String max = ""; 

     boolean fit() { 
     return fit(Float.intBitsToFloat(rnd.nextInt())); 
     } 

     boolean fit(float value) { 
     String x = Float.toString(value); 
     if (x.length() > r) { 
      r = x.length(); 
      max = x; 
      return true; 
     } 
     return false; 
     } 
    } 
    Test test = new Test(); 
    int i = 0; 
    test.fit(Float.MAX_VALUE); 
    test.fit(-Float.MAX_VALUE); 
    test.fit(Float.MIN_VALUE); 
    test.fit(-Float.MIN_VALUE); 
    test.fit(Float.NaN); 
    test.fit(Float.POSITIVE_INFINITY); 
    test.fit(Float.NEGATIVE_INFINITY); 
    while (i < MAX_PERIOD) 
     if (test.fit()) i = 0; 
     else 
     i++; 
    System.out.println("Max. float length: " + test.r + " (" + test.max + ")"); 
    } 

} 
관련 문제