Gibt es eine Möglichkeit, DecimalFormat (oder eine andere Standardformatierung) zu verwenden, um Zahlen wie diese zu formatieren:
1,000,000 => 1.00M
1,234,567 => 1.23M
1,234,567,890 => 1234.57M
Im Grunde dividiert man eine Zahl durch 1 Million, behält 2 Dezimalstellen bei und hängt ein 'M' an das Ende. Ich habe darüber nachgedacht, eine neue Unterklasse von NumberFormat zu erstellen, aber es sieht schwieriger aus, als ich es mir vorgestellt habe.
Ich schreibe eine API, die eine Formatmethode hat, die wie folgt aussieht:
public String format(double value, Unit unit); // Unit is an enum
Intern bilde ich Unit-Objekte auf NumberFormatters ab. Die Implementierung sieht in etwa so aus:
public String format(double value, Unit unit)
{
NumberFormatter formatter = formatters.get(unit);
return formatter.format(value);
}
Beachten Sie, dass ich aus diesem Grund nicht erwarten kann, dass der Client durch 1 Million dividiert, und ich kann nicht einfach String.format() verwenden, ohne es in einen NumberFormatter zu verpacken.
0 Stimmen
Möchten Sie nur M(ega) oder auch (G)iga, (T)era usw. behandeln?
0 Stimmen
Es handelt sich dabei um das Volumen eines Wertpapiers, also M(illions) und möglicherweise B(illions), aber ich gebe mich mit dem M zufrieden.
0 Stimmen
Diese Frage betrifft hat in letzter Zeit viel Aufmerksamkeit erregt (aufgrund eines Kopfgeldes).