Java:格式的数以百万
-
22-08-2019 - |
题
是否有办法使用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));
看一看 ChoiseFormat 一>
有一个更简单的方法是使用自动通过1百万你划分的包装。
现在,你应该使用ICU的 CompactDecimalFormat
,这将本地化对于非英语语言环境的格式化结果。其它语言环境可能不会使用“百千万”后缀。
不隶属于 StackOverflow