java中的数字格式使用Lakh格式而不是百万格式

Posted

技术标签:

【中文标题】java中的数字格式使用Lakh格式而不是百万格式【英文标题】:Number formatting in java to use Lakh format instead of million format 【发布时间】:2013-01-24 17:55:38 【问题描述】:

我尝试过使用NumberFormatDecimalFormat。即使我使用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格式而不是百万格式的主要内容,如果未能解决你的问题,请参考以下文章

谷歌表格中的印度短货币格式

数字应格式化为 excel 中的数字,而不是文本 C#

如何在 java 中格式化 int 数字?

用百万 (M) 和十亿 (B) 后缀格式化数字

如何使用 jq 提取数字格式的浮点值而不是指数值?

这种数字格式有啥问题? [关闭]