如何将数字格式化为固定的语言环境?

Posted

技术标签:

【中文标题】如何将数字格式化为固定的语言环境?【英文标题】:How can I format a number to the fixed locale? 【发布时间】:2011-11-07 10:34:34 【问题描述】:

如何在从最后一个开始的每 3 个位置之后插入字符串逗号 (,)?

input             desired output    

9876567846678     9,876,567,846,678  
567               567
1234              1,234

我使用了一种方法,例如首先将整个字符串除以三个位置,然后将附加的逗号合并三个三个位置。

有没有更好的解决方案?在java中是否有可用的函数来完成这个技巧?

编辑: LAS_VEGAS 答案将根据区域设置格式化数字。但我想将其格式化为固定的语言环境... 我该怎么做?

【问题讨论】:

【参考方案1】:

是的,Java 中有一个“技巧”:

public static String addCommas(int num) 
    DecimalFormat df = new DecimalFormat();
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setGroupingSeparator(',');
    df.setDecimalFormatSymbols(dfs);
    return df.format(num);


System.out.println(addCommas(123456789));

编辑: 如果您希望输出独立于语言环境,您可以使用以下方法。它从末尾开始,因此无需反转字符串并且应该非常有效:

public static String addCommas(int num) 
    StringBuilder s = new StringBuilder(Integer.toString(num));
    for(int i = s.length() - 3; i > 0; i -= 3) 
        s.insert(i, ',');
    
    return s.toString();

【讨论】:

会根据国家/地区采用十进制格式吗?因为它在模拟器中的 3 个位置(西方数字标准)之后附加了 coma.. 但在设备中它附加了 2 个位置(印度数字标准).. 如何将其更改为只有一个标准? 这不是理想的行为吗?这样来自印度的用户就可以在自己的语言环境中看到这些数字。发生的情况是,手机上的 Java 运行时环境可能不支持Locale.US。所以尝试Locale.ROOT,最后尝试使用Locale.UK @vnshetty - 我同意 LAS_VEGAS,这是语言环境的point,一般来说,最好以与他们的方式一致的方式向用户展示数据设置他们的系统。为什么您认为印度用户必须破译西方风格的分组而不是他们的本地期望? @Andrzej Doyle @LAS_VEGAS 这是我的要求,因为我使用语音来读取这些值。我只有西方风格的声音......【参考方案2】:

看看NumberFormat 类,它完全用于将数字格式化为文本输出。

特别是,您正在寻找使用, 符号作为分隔符的DecimalFormat 实例。例如,#,##0 的格式模式应该在没有其他约束的情况下输出您想要的整数。

【讨论】:

【参考方案3】:

好吧,您也可以使用 StringBuilder 来执行此操作。这是一个快速破解的解决方案:

StringBuilder sb = new StringBuilder("123456789");

        int initLength = sb.length();
        for(int i=1; i<initLength; i++)
            if(i % 3 == 0)
                sb.insert(initLength-i, ",");
            
        

        System.out.println(sb);

【讨论】:

以上是关于如何将数字格式化为固定的语言环境?的主要内容,如果未能解决你的问题,请参考以下文章

如何格式化欧洲语言的数字

如何仅使用货币代码将数字格式化为货币?

如何使用正则表达式将数字格式化为货币

如何将数字格式化为货币字符串

将“数字”字符串格式化为数字

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