DecimalFormat取决于系统设置?

Nie*_*els 2 java double decimalformat

我在使用DecimalFormat时遇到了最奇怪的事情.

我在webapplication中使用它.我设置了一些测试,它在本地继续失败.我的一个朋友运行它,他能够成功运行JUnit测试.

奇怪的是,在我们的服务器上,应用程序运行完美,没有任何问题.

可能是Java依赖于valuta和数字设置等系统设置?或者还有其他原因吗?这就是我的代码片段:

public String generateFormatPrice(double price) throws Exception {
    DecimalFormat format1 = new DecimalFormat("#,##0.00");
    String tmp = format1.format(price).replace(".", "&");
    String[] tmps = tmp.split("&");
    return tmps[0].replace(',', '.') + "," + tmps[1];
}
Run Code Online (Sandbox Code Playgroud)

非常感谢提前!

Ste*_*eod 8

此代码确实是特定于语言环境的.如果您的代码依赖于某个区域设置,例如美国的"." 是小数分隔符,","是千位分隔符,然后在设置为(例如,德语区域设置)的服务器上运行此代码,它将失败.

请考虑使用此构造函数,该构造函数允许您显式指定要使用的符号.

编辑:据我所知,你正试图用"."格式化数字.作为千位分隔符和","作为小数分隔符.换句话说,法国和德国使用的格式.以下是实现此目的的一种方法:

public static String generateFormatPrice(double price) {
    final NumberFormat format = NumberFormat.getNumberInstance(Locale.GERMANY);
    format.setMinimumFractionDigits(2);
    format.setMaximumFractionDigits(2);
    return format.format(price);
}
Run Code Online (Sandbox Code Playgroud)

此外,你不应该使用双倍来保持货币价值 - 如果你这样做,你会遇到一些令人讨厌的错误.