2

一部の地理空間データを検証しているので、他のデータ型を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を使用しています。

4

1 に答える 1

1

コンソールをいじくり回した後、私はregexsが本当に行く唯一の方法であると判断しました。BigDecimalこのように振る舞うのは見落としなのか、それとも私が気付いていない本当に良い論理的根拠があるのだろうか。

于 2013-04-12T18:31:20.677 に答える