我在Windows7下用Java8开发了一个Web应用程序,我生成了war文件,并将其部署在Ubuntu下的Tomcat8上;一切正常,但当我格式化和打印数字时,我会得到不同的输出。例如,在Windows中我打印" 74,00"但是在Linux中我得到了#34; 74..00"。 这是我的代码:
//调用方法
formatCurrency(String.format("%.2f", amount));
//方法
private String formatCurrency(String number){
String formattedNumber = "";
try {
String[] support = number.split(",");
String intero = support[0];
if (intero.length() > 3){
formattedNumber = intero.substring(0, intero.length() - 3) + "." + intero.substring(intero.length() - 3);
if (intero.substring(0, intero.length() - 3).length() > 3){
formattedNumber = intero.substring(0, intero.length() - 6) + "." + formattedNumber;
}
}
else
formattedNumber = support[0];
formattedNumber = formattedNumber + "," + support[1];
}
catch (Exception ex) {
System.out.println("errore in stampa " + ex);
}
return formattedNumber;
}
答案 0 :(得分:2)
默认情况下,Java的格式化函数将使用默认语言环境,并且很可能Windows系统和Linux系统上的默认语言环境不同。您应该使用变体that allows you to specify the desired locale
formatCurrency(String.format(Locale.US,"%.2f", amount));
显然,请为您的用例使用适当的Locale。
作为旁注,这段代码难道不是很复杂吗?
如果 - 正如我怀疑的那样 - 唯一的目标是获得数千个分隔符,我是否可以建议这种替代方案更简单,更不容易出错?
private String formatCurrency(double amount) {
NumberFormat nf = NumberFormat.getInstance(Locale.ITALIAN);
nf.setGroupingUsed(true); //force thousands separators, for Locale.ITALIAN it's not even needed
return nf.format(amount);
}