根据区域设置的数字格式(逗号分隔)

Posted

技术标签:

【中文标题】根据区域设置的数字格式(逗号分隔)【英文标题】:Number Format (Comma Separation) as per locale 【发布时间】:2014-01-02 12:50:12 【问题描述】:

我需要以以下格式 123,456,789.90 显示像 123456789.905 这样的数字值。但是逗号分隔会根据手机中选择的语言环境而变化(好像美国英语选择的逗号分隔是 3 个位置,如果选择印度英语,它就像 12,34,56,789.90)。

如何格式化我的Double

【问题讨论】:

如果您发布当前代码可能会有所帮助,以便我们知道您尝试了什么。 您希望数字在任何语言中的格式都相同吗?我的意思是……不管当前的语言环境如何,都应该是123,456,789.90 @RenéLink 不,他说:“如果选择印度英语”。 【参考方案1】:

所以,很遗憾,java.text.NumberFormat 不能解决问题,但 com.ibm.icu.text.NumberFormat 可以。

你可以用这个:

Double d = 123456789.905;
com.ibm.icu.text.NumberFormat format = com.ibm.icu.text.NumberFormat.getNumberInstance(new Locale("en", "in"));
format.setMinimumFractionDigits(2);
format.setMaximumFractionDigits(2);

System.out.println(format.format(d));

这输出:12,34,56,789.90

【讨论】:

【参考方案2】:

对于一般情况,使用java.text.NumberFormat:

NumberFormat nf = NumberFormat.getInstance();
String formatted = nf.format(yourDoubleValue);

默认情况下,getInstance() 返回一个配置为适合当前LocaleNumberFormat。您也可以自己更改配置。

“逗号分隔”称为“分组”。

有关以印度货币格式分组的具体情况,请参见:Displaying Currency in Indian Numbering Format

【讨论】:

【参考方案3】:

试试这个:

try 
                    Locale l = Locale.getDefault();
                    NumberFormat nf = NumberFormat.getInstance(l);
                    String formato = NumberFormat.getInstance().format(your_data);

                 catch (Exception e) 
                    e.printStackTrace();

【讨论】:

【参考方案4】:

使用NumberFormat,它可以帮助您格式化和解析任何语言环境的数字。

您的代码可以完全独立于 小数点,千位分隔符,甚至是特定的小数 使用的数字,或数字格式是否为偶数。

Locale fmtLocale = Locale.getDefault();
NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
formatter.format(your_number);

【讨论】:

【参考方案5】:

嗯,我没有找到NumberFormat.getAvailableLocales() 中的任何语言环境,分组符号之间只有两位数字的格式(例如new Locale("en", "IN"))。所以我认为你必须像这样使用 DecimalFormat-pattern:

DecimalFormat df = new DecimalFormat("##,##,##,##,##.###");
System.out.println(df.format(123456789.905));
// Output: 1.23.45.67.89,905

这并不完全相同,因为 DecimalFormat 不能有不同的分组大小计数,但也许这对您来说是可以接受的。

【讨论】:

【参考方案6】:

NumberFormat nf = NumberFormat.getInstance(Locale.getDefault());

双值 = nf.parse(iValue).doubleValue();

【讨论】:

以上是关于根据区域设置的数字格式(逗号分隔)的主要内容,如果未能解决你的问题,请参考以下文章

Android - 逗号作为数字键盘上的小数分隔符

如何修改excel转换csv的分隔符

如何在 Google Charts 中指定小数点分隔符?

输入 Intl.NumberFormat 时 VueJS 数字格式实时以逗号分隔

ActionScript 3 格式化数字逗号分隔符

CSV (逗号分隔值文件格式)