我正在验证一些地理空间数据,需要将其他数据类型强制为BigDecimal。
我能得到的最接近的是通过下面的代码片段:

def is_decimalizable?(coordinate)
  !coordinate.to_d.zero?
end

当然,to_d对于无效的强制返回零,这会使有效的类零数字结构无法通过测试不过,我在BigDecimal文档中看不到更好的方法(有一个BigDecimal#coerce方法并不真正记录有用的用例。)
# Good:
is_decimalizable?(-100)        #=> true
is_decimalizable?('-100')      #=> true
is_decimalizable?(-100.0)      #=> true
is_decimalizable?('-100.0')    #=> true
is_decimalizable?('-100.0lng') #=> true
bigd = BigDecimal.new('0.1')
is_decimalizable?(bigd)        #=> true

is_decimalizable?('asdf')      #=> false

# Bad:
is_decimalizable?(0)          #=> false
is_decimalizable?('0')        #=> false
is_decimalizable?(0.0)        #=> false
is_decimalizable?('0.0')      #=> false
is_decimalizable?('0.0lng')   #=> false
bigd = BigDecimal.new('0.0')
is_decimalizable?(bigd)       #=> false

有谁能找到更可靠的解决方案吗我用的是ruby2.0.0-p0。

最佳答案

在控制台上做了很多修改之后,我确定regex确实是唯一的方法。我想知道这样的行为是一种疏忽,还是有一些我不知道的很好的理由。

关于ruby - 强制转换为BigDecimal,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15626758/

10-13 07:19