我怎么知道BigDecimal是否无法解析?

我正在从csv导入数据,我需要将一些值转换为BigDecimal,如果无法解析则会引发错误。

从测试开始,BigDecimal(“无效数字”)返回一个0的BigDecimal。这没关系,但有点凌乱,除了有效值为0 …

Float(“无效数字”)的行为不同并抛出exception……

我目前的解决方案是:

class String def to_bd begin Float(self) rescue raise "Unable to parse: #{self}" end BigDecimal(self) end end 

我完全错过了什么吗?

在简单的情况下,您可以使用RegExp

 '123.4' =~ /^[+-]{0,1}\d+\.{0,1}\d*$/ => 0 

我今天遇到了这种不一致的行为。

一种方法:

 def StrictDecimal(arg) Float(arg) BigDecimal(arg) end 

或者更强大的版本:

 def StrictDecimal(value) if value.is_a?(Float) fail ArgumentError, "innacurate float for StrictDecimal(): #{amount}" end Float(value) BigDecimal(value) rescue TypeError fail ArgumentError, "invalid value for StrictDecimal(): #{amount}" end