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.

Voulez-vous gérer M(ega) uniquement, ou également (G)iga (T)ère, etc?
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