如何知道BigDecimal是否无法解析?
我从csv导入数据,我需要将一些值转换为BigDecimal,并且如果它们不能被解析就会报错。
从测试,BigDecimal(“无效数字”)返回一个BigDecimal为0.这将是好的,但有点混乱,除了一个有效的值是0 ...
浮动(“无效数字”)的行为不同,并引发异常...
我目前的解决方案是:
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
链接地址: http://www.djcxy.com/p/45789.html