是否有办法使用DecimalFormat(或一些其他标准格式)以数字格式是这样的:

为1,000,000=>1.00M

1,234,567=>1.23M

1,234,567,890=>1234.57M

基本上可分割的一些数由1万人,保持2个小数位,并打一个"M"。我以为关于创建一个新的子类的数字格式,但它看起来很棘手比我想象的。

我正在写一个API,有一格式方法,看起来是这样的:

public String format(double value, Unit unit); // Unit is an enum

在内部,我是映射单元的对象NumberFormatters.执行情况是这样的:

public String format(double value, Unit unit)
{
    NumberFormatter formatter = formatters.get(unit);
    return formatter.format(value);
}

注意,因为这样,我不能期望的客户划分过1万,我不能使用的字符串。格式()没有包装在一个NumberFormatter.

有帮助吗?

解决方案

String.format("%.2fM", theNumber/ 1000000.0);

欲了解更多信息,请参阅 String.格式javadocs.

其他提示

请注意,如果有一个BigDecimal,可以使用movePointLeft方法:

new DecimalFormat("#.00").format(value.movePointLeft(6));

下面就是我刮起NumberFormat的一个子类。它看起来像它的工作,但我不能完全肯定这是最好的方式:

private static final NumberFormat MILLIONS = new NumberFormat()
{
    private NumberFormat LOCAL_REAL = new DecimalFormat("#,##0.00M");

    public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos)
    {
        double millions = number / 1000000D;
        if(millions > 0.1) LOCAL_REAL.format(millions, toAppendTo, pos);

        return toAppendTo;
    }

    public StringBuffer format(long number, StringBuffer toAppendTo, FieldPosition pos)
    {
        return format((double) number, toAppendTo, pos);
    }

    public Number parse(String source, ParsePosition parsePosition)
    {
        throw new UnsupportedOperationException("Not implemented...");
    }
};

为什么不能简单?

DecimalFormat df = new DecimalFormat("0.00M");
System.out.println(df.format(n / 1000000));

现在,你应该使用ICU的 CompactDecimalFormat ,这将本地化对于非英语语言环境的格式化结果。其它语言环境可能不会使用“百千万”后缀。

该功能将是标准Java在JDK与CompactNumberFormat 12个

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top