DecimalFormat取决于系统设置?

时间:2012-01-05 12:41:07

标签: java double decimalformat

我对DecimalFormat感到最奇怪。

我在网络应用程序中使用它。 我设置了一些测试,它在本地继续失败。 我的一个朋友运行它,他能够成功运行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];
}

提前多多感谢!

1 个答案:

答案 0 :(得分:8)

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

考虑使用此constructor,它允许您明确指定您正在使用的符号。

编辑:据我所知,你正在尝试使用"格式化数字。"作为千位分隔符","作为小数点分隔符。换句话说,法国和德国使用的格式。这是实现这一目标的一种方法:

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

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