Gibt es eine Möglichkeit, DecimalFormat (oder einen anderen Standard-Formatierer) zu verwenden, um Zahlen wie folgt zu formatieren:
1.000.000 = & gt; 1.00M
1,234,567 = & gt; 1.23M
1,234,567,890 = & gt; 1234.57M
Grundsätzlich eine Zahl durch 1 Million teilen, 2 Dezimalstellen beibehalten und ein "M" am Ende schlagen. Ich habe darüber nachgedacht, eine neue Unterklasse von NumberFormat zu erstellen, aber es sieht komplizierter aus als ich es mir vorgestellt habe.
Ich schreibe eine API mit einer Formatmethode, die folgendermaßen aussieht:
%Vor%Intern ordne ich Unit-Objekte NumberFormatters zu. Die Implementierung ist in etwa so:
%Vor%Beachten Sie, dass ich deshalb nicht erwarten kann, dass der Client durch 1 Million dividiert, und ich kann nicht einfach String.format () verwenden, ohne es in NumberFormatter einzubinden.
Weitere Informationen finden Sie in der String.format javadocs .
Beachten Sie, dass Sie, wenn Sie BigDecimal
haben, die Methode movePointLeft
verwenden können:
Hier ist eine Unterklasse von NumberFormat, die ich ausgepeitscht habe. Es sieht so aus, als ob es den Job erledigt, aber ich bin mir nicht ganz sicher, ob es der beste Weg ist:
%Vor%Sehen Sie sich ChoiseFormat an.
>Ein einfacherer Weg wäre die Verwendung eines Wrappers, der automatisch durch 1m geteilt wird.
Tags und Links java formatting numeric numericupdown