java中的数字格式使用Lakh格式而不是百万格式
Posted
技术标签:
【中文标题】java中的数字格式使用Lakh格式而不是百万格式【英文标题】:Number formatting in java to use Lakh format instead of million format 【发布时间】:2013-01-24 17:55:38 【问题描述】:我尝试过使用NumberFormat
和DecimalFormat
。即使我使用en-In
语言环境,这些数字也被格式化为西方格式。是否有任何选项可以将数字格式化为 lakhs 格式?
例如 - 我希望 NumberFormatInstance.format(123456)
提供 1,23,456.00
而不是 123,456.00
(例如,使用 this Wikipedia page 中描述的系统)。
【问题讨论】:
【参考方案1】:由于标准的 Java 格式化程序是不可能的,我可以提供自定义格式化程序
public static void main(String[] args) throws Exception
System.out.println(formatLakh(123456.00));
private static String formatLakh(double d)
String s = String.format(Locale.UK, "%1.2f", Math.abs(d));
s = s.replaceAll("(.+)(...\\...)", "$1,$2");
while (s.matches("\\d3,,.+"))
s = s.replaceAll("(\\d+)(\\d2,.+)", "$1,$2");
return d < 0 ? ("-" + s) : s;
输出
1,23,456.00
【讨论】:
不想要小数怎么办??【参考方案2】:虽然标准 Java 数字格式化程序无法处理这种格式,但 DecimalFormat class in ICU4J 可以。
import com.ibm.icu.text.DecimalFormat;
DecimalFormat f = new DecimalFormat("#,##,##0.00");
System.out.println(f.format(1234567));
// prints 12,34,567.00
【讨论】:
【参考方案3】:DecimalFormat
无法进行这种格式设置。它只允许分组分隔符之间的固定位数。
来自documentation:
分组大小是分组之间的恒定位数 字符,例如 3 表示 100,000,000 或 4 表示 1,0000,0000。如果你 提供具有多个分组字符的模式,间隔 在最后一个和整数的末尾之间是 用过的。所以 "#,##,###,####" == "######,####" == "##,####,####"。
如果你想得到 Lakhs 格式,你必须编写一些自定义代码。
【讨论】:
以上是关于java中的数字格式使用Lakh格式而不是百万格式的主要内容,如果未能解决你的问题,请参考以下文章