将Java应用程序从Windows移植到Linux - 字符格式化

时间:2017-03-13 13:36:38

标签: java linux formatting

我在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;
}

1 个答案:

答案 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);
}