2

我对 DecimalFormat 有最奇怪的事情。

我在网络应用程序中使用它。我设置了一些测试,但它一直在本地失败。我的一个朋友运行它,他能够成功运行 JUnit 测试。

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

会不会是 Java 依赖于系统设置,比如 valuta 和 number 设置?或者还有其他原因吗?这就是我的一段代码的样子:

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];
}

提前非常感谢!

4

1 回答 1

8

此代码确实是特定于语言环境的。如果您的代码取决于在美国等“。”的语言环境中。是小数分隔符,"," 是千位分隔符,然后在设置为例如德语区域设置的服务器上运行此代码,它将失败。

考虑使用此构造函数,它允许您显式指定您正在使用的符号。

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

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

此外,您不应该使用 double 来保存货币价值 - 如果这样做,您将遇到一些令人讨厌的错误。

于 2012-01-05T13:24:03.620 回答