我对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];
}
提前多多感谢!
答案 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);
}
另外,你不应该使用双倍来保持货币价值 - 如果你这样做,你将会遇到一些令人讨厌的错误。