【问题标题】:String to Double Java errorString to Double Java 错误
【发布时间】:2011-10-19 00:56:34
【问题描述】:

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

我有一个 CustomNumberEditor,用于轻松将字符串解析为双精度。 java.text.DecimalFormat 用作将 double 解析为字符串的十进制格式。但是,当您执行 numberFormat.parse(stringDouble) 如果字符串以数字开头并跟随字母时,返回的值是数字。即 12a 被解析为 12。对我来说这显然是错误的,我想轻松解决这个问题。

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

【问题讨论】:

  • Double.parseDouble( String s ) 不起作用?
  • 为什么要将包含字母的字符串解析为双精度?这没有意义。你为什么做这个?另外,我们可以看看一些代码吗?
  • @Joeblackdev:OP 允许用户在文本字段中输入双精度,并解析输入的文本以将其转换为双精度。当然,他必须处理格式错误的文本和国际化的数字。这确实很有意义。
  • 很公平。那么正则表达式可能是最好的方法。将双精度模式与字符串匹配,如果不匹配则返回错误。如果匹配,则将字符串解析为双精度。
  • 正如 Joeblackdev 所说。

标签: java spring parsing double number-formatting


【解决方案1】:
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 语句中,并在输入格式不正确的情况下执行您希望程序执行的任何操作。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多