2009-10-15 7 views
3

Comment puis-je convertir des valeurs en d'autres unités de la page JSP. Par exemple, si j'obtiens la valeur 1001 et que je veux seulement afficher 1K, ou quand j'obtiens 1 000 001, je voudrais afficher 1M et pas cet attribut long, comment puis-je faire cela, quand j'obtiens la valeur Integer à ma page jsp pour exemple $ {myValue}?Conversion de valeurs en préfixes d'unités dans la page JSP

+0

Nous n'allons pas faire votre travail à domicile, apprendre à utiliser Google ce problème a été résolu des milliers de fois. –

Répondre

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

Peut-être que vous pourriez écrire une implémentation personnalisée de java.text.Format ou remplacer java.text.NumberFormat pour le faire. Je ne suis pas au courant d'une classe d'API qui fait une telle chose pour vous. Ou vous pouvez laisser cette logique dans la classe qui sert les données et l'envoyer avec le format approprié. Cela pourrait être mieux, parce que le JSP devrait seulement se soucier des problèmes de formatage. La décision d'afficher "1000" ou "1K" pourrait être une règle côté serveur.

+0

1 million est probablement la plus grande valeur que mon application peut même gérer, donc je n'ai besoin de rien de compliqué ... – newbie

+0

Cela nécessiterait un changement de db ou des changements de classe java, j'utilise plutôt jsp – newbie

+1

DB change? Comment? Non, c'est juste un changement du côté serveur pour le transformer en un format que le JSP peut utiliser. Vous devez écrire une classe pour faire le formatage de toute façon. Il n'y a aucun avantage à le faire sur la JSP. – duffymo

3

Ce problème peut (et devrait à mon avis) être résolu sans boucles.

Voilà comment:

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

Code d'essai:

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

Sortie:

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

question connexe (et source d'origine):

+0

Exactement pas de boucles s'il vous plaît. –

Questions connexes