格式化字符串时%df表示什么?

时间:2014-07-07 15:09:35

标签: java android string string-formatting

我正在尝试创建一个与现有Java函数等效的VB.net。在这个函数中,String被格式化为具有一定数量的小数和数字,但是我无法弄清楚函数究竟在做什么。

for循环使用给定min/max之间的数值填充ArrayList。根据参数dec2disp,数值会被调整为显示一定数量的十进制数字。

Java代码如下:

    for( double d = min; d <= max; d+=inc ) {
        if((m_flags&dispZeroAsOff)!=0 && d==0){
            vList.add(m_offString);
        }else{
            String fmt=String.format("%%.%df", dec2disp);
            String temp = String.format(fmt, d);
            vList.add(temp + unit);
        }
    }

让我感到困惑的是String.format("%%.%df", dec2disp);。我找到了%d%f的解释,但找不到关于%df的任何内容。

3 个答案:

答案 0 :(得分:2)

  

我找到了%d和%f的解释,但找不到任何内容   关于%df的任何地方。

代表DecimalFormat

java.lang.Object

   ↳    java.text.Format

       ↳    java.text.NumberFormat

           ↳    java.text.DecimalFormat
  

NumberFormat的具体子类,用于格式化十进制数字。它   具有各种功能,旨在使解析和   在任何语言环境中格式化数字,包括支持西方语言,阿拉伯语,   或印度数字。它还支持不同的数字,   包括整数(“123”),定点数(“123.4”),科学   符号(“1.23E4”),百分比(“12%”)和货币金额   ( “$ 123”)。所有这些口味都很容易本地化。

参考 - DecimalFormat

注意:

如果您对不同的字符串格式化程序感兴趣,请按照最后的课程Formatter

java.lang.Object
   ↳    java.util.Formatter

答案 1 :(得分:1)

String fmt = String.format(“%%。%df”,dec2disp);

此行为dec2disp请求的小数位数生成有效的格式说明符(取代“%%。%df”中的“%d”,导致类似fmt =“%。2f”)


String temp = String.format(fmt,d);

这使用存储在fmt中的格式说明符来显示具有正确小数位数的d的值。

答案 2 :(得分:0)

%d是字符串模式中与格式化相关的唯一部分。 f只是一个字符文字,点也是双重百分号也是文字,但是已经转义。

最后,这种模式实际上根本不会格式化十进制数。这是一个简单的测试来证明它:

for (int i = 0; i < 10; i++) {
    System.out.println(String.format("%%.%df", i));
}

输出:

%.0f
%.1f
%.2f
%.3f
%.4f
%.5f
%.6f
%.7f
%.8f
%.9f

如果i是浮点数或双精度数,它会抛出IllegalFormatConversionException,因为%d只能应用于整数。