java.lang.NumberFormatException和SystemDecimalSeparator

Nas*_*LEK 1 java

有这个错误

java.lang.NumberFormatException: For input string: "20,00"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at com.agitech.autofaces.el.FormatUtil.parseDouble(FormatUtil.java:122)
    at com.agitech.erp.converter.DoubleConverter.getAsObject(DoubleConverter.java:27)
Run Code Online (Sandbox Code Playgroud)

读完十进制分隔符数字格式后,我试试

public class FormatUtil {
    public static char ApplicationDecimalSeparator = ',';
    public static char SystemDecimalSeparator;
    static {        
        DecimalFormatSymbols symbols= DecimalFormatSymbols.getInstance();
        SystemDecimalSeparator = symbols.getDecimalSeparator();     
        symbols.setDecimalSeparator(ApplicationDecimalSeparator);
    }
    public final static Double parseDouble(String d){
        if (d==null)
            return 0.0;
        return Double.parseDouble( fixDecimalSeparator(d) );
    }
    public final static String fixDecimalSeparator(String d){
        if (SystemDecimalSeparator==ApplicationDecimalSeparator)
            return d;
        return d.replaceAll( ""+SystemDecimalSeparator, ""+ApplicationDecimalSeparator);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后SystemDecimalSeparator已经是','为什么这个例外呢?

它可能期待20.00,但如何获得和修复这个separtor?

事实上,我测试和它的预测"20.00"而默认的SystemDecimalSeparator已经是','

Jon*_*eet 5

你正在调用Double.parseDouble,它总是使用一个点作为小数分隔符 - 它根本不使用默认的语言环境.

Double.parseDouble记录为行为Double.valueOf(String),其中包含以下文档:

要解释浮点值的本地化字符串表示,请使用的子类NumberFormat.