繁体   English   中英

java.lang.NumberFormatException和SystemDecimalSeparator

[英]java.lang.NumberFormatException and SystemDecimalSeparator

有这个错误

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)

阅读此数字格式的十进制分隔符后,我尝试

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

最后SystemDecimalSeparator已经是'',那么为什么会出现此异常?

它可能期望20.00,但如何获取并修复此分离器?

确实,我测试了它的期望值“ 20.00”,默认的SystemDecimalSeparator已经是','

您正在调用Double.parseDouble ,它始终使用点作为小数点分隔符-根本不使用默认语言环境。

Double.parseDouble被记录为类似于Double.valueOf(String) ,其行为包括:

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

这应该工作:

NumberFormat f = NumberFormat.getInstance(); // Gets a NumberFormat with the default locale, you can specify a Locale as first parameter (like Locale.FRENCH)
double myNumber = f.parse("20,0").doubleValue(); // myNumber now contains 20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM