Java数字格式[重复]

Posted

技术标签:

【中文标题】Java数字格式[重复]【英文标题】:Java number formatting [duplicate] 【发布时间】:2015-09-07 16:05:16 【问题描述】:

使用下面的代码使用模式#,##,###.### 格式化数字 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

【问题讨论】:

这一切都在文档中:docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html 恕我直言,这不是重复的。 OP 的问题不是小数点分隔符。 @Ahmad 你能解释一下为什么你认为这个问题与你所链接的问题重复吗?关于小数点分隔符类型转换的问题你在哪里看到的? @Gosu:你能解释一下为什么你认为234,156.123是“源代码”吗?既然你已经把它格式化了,那你有一个理由,对吧? @Tom 好的,当然。会记住这一点。 【参考方案1】:

很遗憾,DecimalFormat 不能满足您的要求。

来自Javadoc:

分组大小是一个常数 分组字符之间的位数,例如 3 表示 100,000,000 或 4 对应 1,0000,0000。如果你提供一个模式 多个分组字符,最后一个和之间的间隔 整数的结尾是使用的那个。所以“#,##,###,####”== "######,####" == "##,####,####"。

您想要的行为有一个非常量的组大小 - 3 前面有 2 前面有 1。您需要编写自己的格式化程序。

【讨论】:

【参考方案2】:

继 Alex 的评论 docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html

分组分隔符通常用于千位,但在某些国家/地区,它分隔万位。分组大小是分组字符之间的恒定位数,例如 3 表示 100,000,000 或 4 表示 1,0000,0000。如果您提供具有多个分组字符的模式,则最后一个和整数末尾之间的间隔就是所使用的间隔。所以 "#,##,###,####" == "######,####" == "##,####,####"。

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

【讨论】:

所以这解释了行为。但是解决方案呢?

以上是关于Java数字格式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从字符串到整数的转换中的Java数字格式异常[重复]

在两个不同的固定数量的地方用逗号格式化数字[重复]

从变量中按数字更改小数位 - JAVA [重复]

如何在Java程序中写一个方法可随机生成12位数字,且永远不会重复,唯一的。

PHP数字格式2位小数[重复]

洛谷 P1706 全排列问题(Java版)