首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何知道BigDecimal是否无法解析?

如何知道BigDecimal是否无法解析?
EN

Stack Overflow用户
提问于 2010-05-07 21:48:52
回答 2查看 1.6K关注 0票数 7

我正在从csv导入数据,我需要将一些值转换为BigDecimal,如果它们不能被解析,就会引发一个错误。

通过测试,BigDecimal("invalid number")返回的BigDecimal为0。这是可以的,但有点混乱,除非有效值是0……

Float("invalid number")的行为有所不同,并抛出一个异常...

我目前的解决方案是:

代码语言:javascript
运行
复制
class String
  def to_bd
    begin
      Float(self)
    rescue
      raise "Unable to parse: #{self}"
    end
    BigDecimal(self)
  end
end

我是不是完全漏掉了什么?

EN

回答 2

Stack Overflow用户

发布于 2010-05-07 22:37:38

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

代码语言:javascript
运行
复制
'123.4' =~ /^[+-]{0,1}\d+\.{0,1}\d*$/
=> 0
票数 2
EN

Stack Overflow用户

发布于 2012-10-04 17:26:35

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

一种方法是:

代码语言:javascript
运行
复制
def StrictDecimal(arg)
  Float(arg)
  BigDecimal(arg)
end

或者一个更健壮的版本:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2789028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档