如何知道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

上一篇: How do I know if a BigDecimal failed to parse?

下一篇: Adding a new subversion user programmatically with C#