我正在验证一些地理空间数据,我需要将其他数据类型强制转换为 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 来获得它的价值。