我正在从csv导入数据,我需要将一些值强制转换为BigDecimal,如果无法解析则会引发错误。
从测试开始,BigDecimal(“无效数字”)返回一个0的BigDecimal。这没关系,但有点杂乱,除了有效值为0 ......
Float(“无效数字”)的行为不同,并引发异常......
我目前的解决方案是:
class String
def to_bd
begin
Float(self)
rescue
raise "Unable to parse: #{self}"
end
BigDecimal(self)
end
end
我完全错过了什么吗?
答案 0 :(得分:2)
在简单的情况下,您可以使用RegExp
'123.4' =~ /^[+-]{0,1}\d+\.{0,1}\d*$/
=> 0
答案 1 :(得分:2)
我今天遇到了这种不一致的行为。
一种方法:
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