2009-10-15 3 views
3

JSP 페이지에서 값을 다른 단위로 변환하는 방법은 무엇입니까? 예를 들어 값 1001을 얻었을 때 1K 만 표시하려고하거나 1 000 001이 표시되면 1M을 표시하고 긴 속성을 표시하지 않으려 고합니다. JSP 페이지에 대한 정수 값을 가져올 때 어떻게 할 수 있습니까? 예를 들어 $ {myValue}?JSP 페이지의 단위 접두어로 값 변환

+0

우리는 홈 일을하지 않을 수 있습니다, 시대의 구글이 문제가 해결 수천을 사용하는 방법을 배우게. –

답변

3
static String toSymbol(int in) { 
    String[] p = { "", "K", "M", "G" }; 
    int k = 1000; 
    assert pow(k, p.length) - 1 > Integer.MAX_VALUE; 
    int x = in; 
    for (int i = 0; i < p.length; i++) { 
     if (x < 0 ? -k < x : x < k) return x + p[i]; 
     x = x/k; 
    } 
    throw new RuntimeException("should not get here"); 
} 
1

아마도 java.text.Format의 사용자 정의 구현을 작성하거나 java.text.NumberFormat를 대체하여이를 수행 할 수 있습니다. 나는 당신을 위해 그런 것을하는 API 클래스를 알지 못한다.

또는 로직을 데이터를 제공하는 클래스에 그대로두고 적절한 형식으로 보낼 수 있습니다. JSP는 서식 지정 문제에만 신경을 써야하기 때문에 더 좋습니다. "1000"또는 "1K"로 표시하기로 결정하면 서버 측 규칙이 될 수 있습니다.

+0

1 백만은 아마도 내 응용 프로그램이 처리 할 수있는 가장 큰 가치이기 때문에 복잡한 것은 필요하지 않습니다. – newbie

+0

DB 변경 또는 Java 클래스 변경이 필요합니다. 단지 jsp를 사용합니다 – newbie

+1

DB 변경? 어떻게 그렇게? 아니요, 그것은 JSP가 사용할 수있는 형식으로 변환하는 서버 측의 변경 일뿐입니다. 어쨌든 형식을 지정하려면 클래스를 작성해야합니다. JSP에서 이점을 누릴 수는 없습니다. – duffymo

3

이 문제는 (내 생각에 해야)은 루프없이 해결할 수 있습니다.

는 방법은 다음과 같습니다

public static String withSuffix(long count) { 
    if (count < 1000) return "" + count; 
    int exp = (int) (Math.log(count)/Math.log(1000)); 
    return String.format("%.1f %c", 
         count/Math.pow(1000, exp), 
         "kMGTPE".charAt(exp-1)); 
} 

테스트 코드 :

for (long num : new long[] { 0, 27, 999, 1000, 110592, 
          28991029248L, 9223372036854775807L }) 
    System.out.printf("%20d: %8s%n", num, withSuffix(num)); 

출력 :

    0:  0 
        27:  27 
       999:  999 
       1000: 1.0 k 
       110592: 110.6 k 
     28991029248: 29.0 G 
9223372036854775807: 9.2 E 

관련 질문 (그리고 원래의 소스) :

+0

정확히 루프가 없습니다. –