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

时间:2014-01-02 12:50:13

标签: java number-formatting

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

如何格式化我的Double

6 个答案:

答案 0 :(得分:3)

所以,不幸的是,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

答案 1 :(得分:2)

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

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

默认情况下,getInstance()会返回NumberFormat,其配置适合当前Locale。您也可以自己更改配置。

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

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

答案 2 :(得分:0)

试试这个:

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

                } catch (Exception e) {
                    e.printStackTrace();}

答案 3 :(得分:0)

使用NumberFormat,它可以帮助您格式化和解析任何区域设置的数字。

  

您的代码可以完全独立于语言环境约定   小数点,千位分隔符,甚至特定小数   使用的数字,或数字格式是否为十进制。

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

答案 4 :(得分:0)

嗯,我没有找到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不能有不同的分组大小计数,但也许这对你来说是可以接受的。

答案 5 :(得分:0)

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

double value = nf.parse(iValue).doubleValue();

相关问题