Java: Format de nombre en millions
Est-il un moyen d'utiliser DecimalFormat (ou une autre norme de formatage) pour formater les nombres comme ceci:
De 1 000 000 => 1,00 M
1,234,567 => 1,23 M
1,234,567,890 => 1234.57 M
Fondamentalement divisant un nombre par 1 millions de dollars, en gardant 2 décimales, et en frappant d'un " M " à la fin. J'ai pensé à la création d'une nouvelle sous-classe de NumberFormat mais il a l'air plus compliqué que ce que j'imaginais.
Je suis en train d'écrire une API qui a une méthode de mise en forme qui ressemble à ceci:
public String format(double value, Unit unit); //Unit is an enum
En interne, je suis à l'Unité de cartographie des objets à NumberFormatters. La mise en œuvre est quelque chose comme ceci:
public String format(double value, Unit unit)
{
NumberFormatter formatter = formatters.get(unit);
return formatter.format(value);
}
Noter qu'en raison de cela, je ne peux pas attendre le client à diviser par 1 million de dollars, et je ne peut pas utiliser de Chaîne.format() sans l'enveloppant dans un NumberFormatter.
En fait, il représente un volume, il est donc M(en millions) et potentiellement B(en millions), mais je vais être heureux avec juste le M.
Cette question connexe a été d'obtenir beaucoup d'attention récemment (en raison de l'abondance).
OriginalL'auteur Outlaw Programmer | 2009-02-09
Vous devez vous connecter pour publier un commentaire.
Pour plus d'informations, voir la Chaîne de caractères.format javadoc.
Mineur pinaille, ressemble à son code à l'aide de la nostalgie ou de l'ints de sorte que vous pouvez passer avec l'arithmétique à virgule flottante:
Si je quitte le calcul en virgule flottante, je serais avec un nombre entier, sans décimale. Nous avons besoin d'au moins 2.
Cela fonctionne, mais j'ai encore besoin de l'envelopper avec un NumberFormat objet, en raison d'une contrainte supplémentaire que j'ai oublié de mentionner. Fondamentalement, il ya une CARTE[Type => NumberFormatter] que cela doit jouer gentiment avec.
Eh bien, je n'ai jamais utilisé un NumberFormatter...donc je ne sais pas le moyen le plus facile pour l'envelopper.
OriginalL'auteur jjnguy
Notez que si vous avez un
BigDecimal
, vous pouvez utiliser lemovePointLeft
méthode:OriginalL'auteur oxbow_lakes
Voici une sous-classe de NumberFormat que je fouettée. On dirait qu'il fait le travail, mais je ne suis pas entièrement sûr que c'est la meilleure façon:
OriginalL'auteur Outlaw Programmer
Pourquoi ne pas tout simplement?
OriginalL'auteur toolkit
Prendre un coup d'oeil à ChoiseFormat.
Un plus simple serait d'utiliser un wrapper qui auto divisé par 1m pour vous.
OriginalL'auteur sblundy