我正在尝试创建一个与现有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
的任何内容。
答案 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
只能应用于整数。