我正在验证一些地理空间数据,我需要将其他数据类型强制转换为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来获取它的价值。
答案 0 :(得分:1)
经过多次修补控制台,我已经确定正则表达式真的是唯一的出路。我想知道BigDecimal
这种行为是否是一种疏忽,或者有一些我不了解的理由。