2
我正在驗證一些地理空間數據,我需要將其他數據類型強制轉換爲BigDecimal。一般強制爲BigDecimal
我能得到最接近的是通過下面的代碼片段:
def is_decimalizable?(coordinate)
!coordinate.to_d.zero?
end
當然,to_d
返回零無效的強制,使有效的零喜歡像數,結構測試失敗。不過,我不能在BigDecimal
文檔中看到更好的方法。 (有一個BigDecimal#coerce
方法並沒有真正有幫助usecases。)
# 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來表示它的價值。
哇,一個巨大的不一致的PITA! Float('pancakes')引發異常,但BigDecimal('pancakes')返回零。 – 2013-03-26 02:26:44
你有沒有想過這個?我想到了一個醜陋的「is_a?」,「respond_to?」,並且正則表達式可以達到您所能獲得的最佳效果。 – 2013-04-12 04:27:55
我最終完成了一個正則表達式。我喜歡基於方法的做法,但沒有找到其他真正的選擇。 – 2013-04-12 14:13:11