Java数字格式化

4
使用以下代码对234156.123格式化为#,##,###.###,得到的格式化结果是234,156.123,但实际应该格式化为2,34,156.123。

小数点后的位数符合模式,但是小数点前的数字并没有按照预期格式化。

代码如下:

String pattern = "#,##,###.###";
double number = 234156.123;
DecimalFormat decimalFormat = new DecimalFormat(pattern);
String format = decimalFormat.format(number);
System.out.println(format);

结果:

234,156.123


期望结果:

2,34,156.123


2
一切都在文档中:https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html - user146043
1
在我看来,这不是重复的问题。OP的问题不是小数分隔符。 - Marvin
@Ahmad,你能解释一下为什么你认为这个问题是你链接的那个问题的重复吗?你在哪里看到有关十进制分隔符类型转换的问题? - Tom
@Gosu:你能解释一下为什么你认为234,156.123是“源代码”吗?既然你将其格式化为这样,那么你肯定有理由,对吧? - Tom
1
@Tom 好的,没问题。我会记住的。 - almightyGOSU
显示剩余3条评论
2个回答

0

继Alex的评论之后,可以参考docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html

分组分隔符通常用于千位数,但在某些国家,它将万位数分隔开。分组大小是分组字符之间的常数数字,例如100,000,000的分组大小为3,1,0000,0000的分组大小为4。如果您提供具有多个分组字符的模式,则最后一个字符与整数结尾之间的间隔将被使用。因此,"#,##,###,####" == "######,####" == "##,####,####"。

要以这种方式格式化,您需要编写自定义格式化程序。


3
这解释了这种行为。但解决方案呢? - Dioxin

0

很不幸,DecimalFormat不能满足你的要求。

Javadoc中可以看到:

分组大小是分组字符之间的固定数字,例如 3 表示 100,000,000,4 表示 1,0000,0000。如果您提供了带有多个分组字符的模式,则最后一个和整数结尾之间的间隔将被使用。因此,"#,##,###,####" == "######,####" == "##,####,####"。

你所期望的行为具有非固定的分组大小——3 前面跟着 2 再前面跟着 1。您需要编写自己的格式化程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接