我正在验证一些地理空间数据,需要将其他数据类型强制为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/