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

Java 根据区域设置的数字格式(逗号分隔),java,number-formatting,Java,Number Formatting,我需要以以下格式显示类似于123456789.905的数值123456789.90。但逗号分隔取决于手机中选择的语言环境(就好像美国英语而言,所选逗号分隔为3个位置,而印度英语则类似于12,34,56789.90) 如何格式化我的双精度?对于一般情况,请使用: 默认情况下,getInstance()返回一个NumberFormat,该格式根据当前区域设置进行了适当配置。您也可以自己更改配置 “逗号分隔”称为“分组” 有关以印度货币格式分组的具体情况,请参见:尝试以下方法: try {

我需要以以下格式显示类似于
123456789.905
的数值
123456789.90
。但逗号分隔取决于手机中选择的语言环境(就好像美国英语而言,所选逗号分隔为3个位置,而印度英语则类似于
12,34,56789.90

如何格式化我的
双精度

对于一般情况,请使用:

默认情况下,
getInstance()
返回一个
NumberFormat
,该格式根据当前
区域设置进行了适当配置。您也可以自己更改配置

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

有关以印度货币格式分组的具体情况,请参见:

尝试以下方法:

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

                } catch (Exception e) {
                    e.printStackTrace();}
使用,它可以帮助您格式化和解析任何区域设置的数字

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


因此,不幸的是,
java.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,56789.90
Hm,我在
NumberFormat.getavailablecales()
中找不到任何区域设置在分组符号之间只有两位数字的格式(例如
新区域设置(“en”,“in”)
)。因此,我认为您必须使用这样的DecimalFormat模式:

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

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

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


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

如果您发布当前代码以便我们知道您尝试了什么,这可能会有所帮助。您希望以任何语言将数字格式化为相同的格式吗?我是说。。。不管当前的语言环境如何,它应该是
123456789.90
?@rene-Link否,他说:“如果选择了印度英语”。
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));
DecimalFormat df = new DecimalFormat("##,##,##,##,##.###");
System.out.println(df.format(123456789.905));
// Output: 1.23.45.67.89,905