printf 中的空格作为分组分隔符

Space as grouping separator in printf

提问人:blekione 提问时间:11/9/2012 最后编辑:Subhrajyoti Majumderblekione 更新时间:11/9/2012 访问量:6442

问:

我知道如何使用逗号作为分组分隔符以如下格式打印值printf1,000,000.00

以这种方式打印它,我使用命令

System.out.printf ("%,.2f", value);

但是如何使用空格作为分组分隔符来格式化值,例如1 000 000.00

我试图找到解决方案,但现在使用解决方案对我来说很复杂(初级水平)。有没有像逗号示例一样简单的方法来做到这一点DecimalFormat

爪哇岛

评论

0赞 blekione 11/9/2012
据我所知,%s 用于打印字符串。在上面的示例中,我想打印浮点值,但格式是分组分隔符为空格
0赞 Erk 6/28/2018
您正在查看的格式取决于区域设置。但是,空格和句点是美国(逗号)和欧洲(空格分组)格式的奇怪组合。但它不会像弄错“.”和“,”那样令人困惑;o)

答:

0赞 SomeJavaGuy 11/9/2012 #1

如果你想这样做,你应该使用 Decimalformat 这将是你的解决方案

十进制格式 f = 新 DecimalFormat(“#0,000.00”);

f.格式(13000);

这里稍微解释一下: 逗号后面的零数量将为您提供 DecimalFormat 将在其中插入一个点的数字数量。点后面的零量是 DecimalFormat 将写入的小数点数

编辑:哦,我刚刚看到你想在那里有空格:

因为 f.format 将返回一个 String,所以您可以简单地添加.replace("\\.", " ");

方法。这将用空格替换其中写的所有点

评论

0赞 blekione 11/9/2012
我理解它,它工作正常,但逗号。当我尝试将逗号更改为空格时,它不起作用。显示没有分组分隔符的输出,例如' '#0 000.001000000.00
0赞 SomeJavaGuy 11/9/2012
请参阅下面的答案,它们都准备好简化为 DecimalFormatSymbols
1赞 SomeJavaGuy 11/9/2012
即便如此,这个DecimalFormat f = new DecimalFormat("0,000.00"); DecimalFormatSymbols d = f.getDecimalFormatSymbols(); d.setGroupingSeparator(' '); f.setDecimalFormatSymbols(d); String t = f.format(3000000); System.out.println(t);
8赞 jalopaba 11/9/2012 #2

快速回答:

String result = String.format("%,.2f", value).replace(".", " ");
System.out.println(result);

(假设您使用的是 Java 1.5 或更高版本)。

用:DecimalFormat

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.getDefault());
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
String.format(symbols.getGroupingSeparator(), ' ')

甚至更好:

symbols.setGroupingSeparator(' ');
f = new DecimalFormat("###,###.00", symbols);
System.out.println(f.format(value));

评论

1赞 Hummeling Engineering BV 2/5/2019
请注意,快速答案并非在所有区域设置中都有预期的结果。句点在一个区域设置中表示小数分隔符,在另一个区域设置中表示分组字符。replace().
1赞 KrHubert 11/9/2012 #3

Printf 不处理这个问题。请改用 println。来自 oracle 的示例:

DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(currentLocale);
unusualSymbols.setDecimalSeparator('|');
unusualSymbols.setGroupingSeparator('^');

String strange = "#,##0.###";
DecimalFormat weirdFormatter = new DecimalFormat(strange, unusualSymbols);
weirdFormatter.setGroupingSize(4);

String bizarre = weirdFormatter.format(12345.678);
System.out.println(bizarre);

out : 1^2345|678

要将 Float 转换为 String:

println 使用 FloatingDecimal

printf 使用 FormattedFloatingDecimal

但我没有时间更深入地研究为什么这些课程是不同的。享受阅读:)

评论

0赞 blekione 11/9/2012
“奇怪”的例子,但我想我理解它。谢谢