DecimalFormat (またはその他の標準フォーマッタ) を使用して数値を次のようにフォーマットする方法はありますか:
1,000,000 => 1.00M
1,234,567 => 123 万
1,234,567,890 => 1234.57M
基本的に、ある数値を 100 万で割り、小数点以下 2 桁を維持し、末尾に「M」を付けます。NumberFormat の新しいサブクラスを作成することを考えましたが、想像以上に難しそうです。
次のようなフォーマット メソッドを持つ API を作成しています。
public String format(double value, Unit unit); // Unit is an enum
内部的には、Unit オブジェクトを NumberFormatters にマッピングしています。実装は次のようなものです。
public String format(double value, Unit unit)
{
NumberFormatter formatter = formatters.get(unit);
return formatter.format(value);
}
このため、クライアントが 100 万で割ることは期待できないことに注意してください。また、NumberFormatter でラップせずに String.format() を使用することはできません。