String to Double Java错误

时间:2011-08-03 11:31:13

标签: java spring parsing double number-formatting

在使用Spring和Java解析String to Doubles时,我遇到了一些问题。这与Spring并不完全相关,但它可能会让你陷入困境。

我有一个CustomNumberEditor,用于轻松解析Strings to Doubles。 java.text.DecimalFormat用作解析double到string的十进制格式。但是,当你使用numberFormat.parse(stringDouble)时,如果字符串以数字开头,并且后跟字母,则返回的值是数字。即12a被解析为12.对我而言,这显然是错误的,我想轻易解决这个问题。

我想这应该在其他类型的numberFormat或属性或其他东西中实现,但我找不到它。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您应该使用version of the parse method taking a ParsePosition as argument。解析完成后,位置索引将更新为使用最后一个字符后的索引。因此,您可以检查此索引是否等于字符串的长度。如果不是,则表示整个字符串尚未用于生成返回的数字。

答案 1 :(得分:0)

parse(...)方法不会消耗所有文字,因此会允许12a等“数字”(这也可能是像12USD这样的货币。)

但是,您的CustomNumberEditor可能只是将一个仅数字模式应用于String#matches(...),以便在解析字符串之前检查字符串只包含一个数字 - 类似于^-?\d+\.?\d*$(字符串必须只有包含数字,减号和分隔符)。但是,您应该注意,这是依赖于语言环境的,并不像十进制格式模式那样灵活。

答案 2 :(得分:0)

try{
    double d = Double.parseDouble("12abc");
}
catch(NumberFormatException nfe){
    System.out.println("The string is not formatted correctly");
    //do something here if the string is bad

}

如上所述,请使用Double.parseDouble(String s)。如果字符串格式不正确,它将抛出异常。然后你只需将它包装在try-catch语句中,并在输入格式不正确的情况下执行你希望程序执行的任何操作。