Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将十进制格式的小数分隔符从逗号改为点/点?_Java_Android_Bigdecimal_Decimal Point_Decimalformat - Fatal编程技术网

Java 如何将十进制格式的小数分隔符从逗号改为点/点?

Java 如何将十进制格式的小数分隔符从逗号改为点/点?,java,android,bigdecimal,decimal-point,decimalformat,Java,Android,Bigdecimal,Decimal Point,Decimalformat,我有一个疯狂的小方法,它可以将大十进制值转换成漂亮且可读的字符串 private String formatBigDecimal(BigDecimal bd){ DecimalFormat df = new DecimalFormat(); df.setMinimumFractionDigits(3); df.setMaximumFractionDigits(3); df.setMinimumIntegerDigits(1); df.setMaximumI

我有一个疯狂的小方法,它可以将大十进制值转换成漂亮且可读的字符串

private String formatBigDecimal(BigDecimal bd){
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(3);
    df.setMaximumFractionDigits(3);
    df.setMinimumIntegerDigits(1);
    df.setMaximumIntegerDigits(3);
    df.setGroupingSize(20);
    return df.format(bd);
}
然而,它也会产生一个所谓的分组分隔符“
”,“
”,使我的所有值都是这样显示的:

xxx,xxx
我确实需要分隔符是点或点,而不是逗号。 有人知道如何完成这个小壮举吗

我已经读过了,尤其是到了死亡,但我找不到一个方法来完成这件事。
我是不是走错了路?有没有更优雅的方法?甚至可能是一个解决方案,它可以解释不同的本地数字表示,因为按照欧洲标准,逗号是完美的。

欧洲是相当大的。我不确定他们是否都使用相同的格式。不过,你的回答会有所帮助

String text = "1,234567";
NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY);
double val = nf_in.parse(text).doubleValue();

NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK);
nf_out.setMaximumFractionDigits(3);
String output = nf_out.format(val);

即使用正确的区域设置。

您可以通过设置区域设置或使用

如果希望分组分隔符为点,可以使用欧洲语言环境:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
DecimalFormat df = (DecimalFormat)nf;
或者,您可以使用DecimalFormatSymbols类更改format方法生成的格式化数字中出现的符号。这些符号包括十进制分隔符、分组分隔符、减号和百分号等:

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale);
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat(formatString, otherSymbols);
currentLocale可以从Locale.getDefault()获得,即:


BigDecimal似乎不尊重区域设置

Locale.getDefault(); //returns sl_SI
斯洛文尼亚语言环境应具有十进制逗号。我想我对数字有奇怪的误解

a = new BigDecimal("1,2") //throws exception
a = new BigDecimal("1.2") //is ok

a.toPlainString() // returns "1.2" always
我编辑了一部分毫无意义的消息,因为事实证明这是人为错误造成的(忘记提交数据,看到的是错误的东西)

对于任何Java.toString()函数都可以说与BigDecimal相同。我想这在某些方面是好的。例如序列化或调试。有一个唯一的字符串表示形式


正如其他人提到的,使用格式化程序也可以。只需使用格式化程序,与JSF前端相同,格式化程序可以正确地完成工作,并且知道区域设置。

这在我的案例中起到了作用:

String money = output.replace(',', '.');
DecimalFormat df2 = new DecimalFormat("#.##");           
df2.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.ENGLISH));

在方法中返回字符串之前,可以使用replace函数

return df.format(bd).replace(",", ".")
这对我有用

    double num = 10025000;
    new DecimalFormat("#,###.##");
    DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
    System.out.println(df.format(num));

你也可以改变语言,这对我很有用。您可以使用十进制格式的applyPattern来获取.00I已更改的其他符号;与其他符号一样。setDecimalSeparator('.');谢谢。它对我有用。它是格式的样子,例如
String formatString=“#,###,###,##0.00”有关语法“您可以使用欧洲语言环境”的信息,请参见。嗯,您不能使用任何来自欧洲的语言环境,因为
locale.UK
将返回
1567.90
而不是1.567,90旁注:
NumberFormat.getNumberInstance()
在一些Android 7设备上运行速度异常缓慢。另一种选择是运行速度很快的
String.format()
。先生,你确实看到了!在英国可以看到“1234.00英镑”,而在法国可以看到“1234,00欧元”(组分隔符、十进制分隔符、货币符号和货币位置已更改)。数字可以是阿拉伯语格式,并且使用另一个分隔符:(٫)(十六进制U+066B)。数字也不同:
return df.format(bd).replace(",", ".")
    double num = 10025000;
    new DecimalFormat("#,###.##");
    DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
    System.out.println(df.format(num));