我正在从csv导入数据,我需要将一些值转换为BigDecimal,如果它们不能被解析,就会引发一个错误。
通过测试,BigDecimal("invalid number")返回的BigDecimal为0。这是可以的,但有点混乱,除非有效值是0……
Float("invalid number")的行为有所不同,并抛出一个异常...
我目前的解决方案是:
class String
def to_bd
begin
Float(self)
rescue
raise "Unable to parse: #{self}"
end
BigDecimal(self)
end
end我是不是完全漏掉了什么?
发布于 2012-10-04 17:26:35
我今天遇到了这种不一致的行为。
一种方法是:
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}"
endhttps://stackoverflow.com/questions/2789028
复制相似问题