代码之家  ›  专栏  ›  技术社区  ›  Tim Frey

Java:百万的格式号

  •  9
  • Tim Frey  · 技术社区  · 16 年前

    是否可以使用decimalformat(或其他一些标准格式设置工具)来设置以下数字的格式:

    1000000=>1.00米

    1234567=>1.23米

    1234567890=>1234.57米

    基本上,将某个数字除以100万,保留2个小数位,并在末尾加上“m”。我曾考虑过创建一个新的数字格式子类,但它看起来比我想象的要复杂。

    我正在编写一个API,它的格式方法如下:

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

    在内部,我将单元对象映射到数字格式化程序。实现是这样的:

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

    请注意,由于这个原因,我不能期望客户机除以100万,而且我不能只使用string.format()而不将其包装在数字格式化程序中。

    5 回复  |  直到 16 年前
        1
  •  18
  •   jjnguy Julien Chastang    16 年前
    String.format("%.2fM", theNumber/ 1000000.0);
    

    有关更多信息,请参阅 String.format javadocs .

        2
  •  4
  •   oxbow_lakes    16 年前

    注意,如果你有 BigDecimal ,您可以使用 movePointLeft 方法:

    new DecimalFormat("#.00").format(value.movePointLeft(6));
    
        3
  •  3
  •   Tim Frey    16 年前

    这是我创建的一个数字格式的子类。看起来它能胜任工作,但我不完全确定这是最好的方法:

    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...");
        }
    };
    
        4
  •  3
  •   toolkit    16 年前

    为什么不简单?

    DecimalFormat df = new DecimalFormat("0.00M");
    System.out.println(df.format(n / 1000000));
    
        5
  •  0
  •   sblundy    16 年前

    看一看 ChoiseFormat .

    更简单的方法是使用自动除以1米的包装器。

    推荐文章