C'è un modo per utilizzare DecimalFormat (o qualche altro formattatore standard) per formattare i numeri in questo modo:Java: il numero formato in milioni
1.000.000 => 1,00M
1.234.567 => 1.23m
1.234.567,89 mille => 1234.57M
Fondamentalmente dividendo un numero da 1 milione, mantenendo 2 decimali, e battendosi una 'M' sull'estremità. Ho pensato di creare una nuova sottoclasse di NumberFormat ma sembra più complicata di quanto immaginassi.
Sto scrivendo un'API che ha un metodo formato che assomiglia a questo:
public String format(double value, Unit unit); // Unit is an enum
Internamente, io sono la mappatura oggetti Unità a NumberFormatters. L'implementazione è qualcosa di simile:
public String format(double value, Unit unit)
{
NumberFormatter formatter = formatters.get(unit);
return formatter.format(value);
}
Si noti che a causa di questo, non posso aspettare il cliente di dividere per 1 milione, e non posso semplicemente usare String.Format() senza avvolgendolo in un NumberFormatter.
Vuoi gestire M (EGA) soltanto, o anche (G) IgA, (T) era , eccetera? –
In realtà rappresenta un volume di sicurezza, quindi è M (illions) e potenzialmente B (illions) ma sarò felice solo con il M. –
[Questa domanda correlata] (http://stackoverflow.com/q/4753251/ 983430) ha ricevuto molta attenzione di recente (a causa di una taglia). –