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数字格式[重复]的主要内容,如果未能解决你的问题,请参考以下文章