Ruby 对BigDecimal的一般强制
我正在验证一些地理空间数据,需要将其他数据类型强制转换为BigDecimal 我可以通过以下代码片段获得最接近的结果:Ruby 对BigDecimal的一般强制,ruby,Ruby,我正在验证一些地理空间数据,需要将其他数据类型强制转换为BigDecimal 我可以通过以下代码片段获得最接近的结果: def is_decimalizable?(coordinate) !coordinate.to_d.zero? end 当然,to_d为无效强制返回零,这使得有效的类零数字结构无法通过测试。不过,在BigDecimal文档中,我真的找不到更好的方法。(有一种BigDecimal#胁迫方法不能真正记录有用的用例。) 有谁能找到更可靠的解决方案吗?我使用ruby2.0.0-
def is_decimalizable?(coordinate)
!coordinate.to_d.zero?
end
当然,to_d
为无效强制返回零,这使得有效的类零数字结构无法通过测试。不过,在BigDecimal
文档中,我真的找不到更好的方法。(有一种BigDecimal#胁迫
方法不能真正记录有用的用例。)
有谁能找到更可靠的解决方案吗?我使用ruby2.0.0-p0是为了它的价值。在console中进行了大量的修补之后,我确定Regex确实是唯一的选择。我想知道
BigDecimal
的这种行为是一种疏忽,还是有一些我不知道的很好的理由。哇,多么不一致的PITA啊Float('pancakes')
引发异常,但BigDecimal('pancakes')
返回零。你有没有发现这个问题?我认为一个丑陋的混搭的是一个
,响应
,正则表达式将是你能得到的最好的。我最终完全使用了一个正则表达式。我很喜欢一种基于方法的方法,但没有找到其他真正的替代方法。我认为正则表达式是你能得到的最好的方法,可惜BigDecimal(x)
的行为如此无用。如果你愿意,你可以回答你的问题并接受这个答案,这可能比不回答要好。
# 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