1

私は現在、請求書のある仕事用のイントラネットを構築しています。私は現在、VATが正しく合計されることなどを確認するためのテストを書いています。

ある量では、Rails/Rubyが必要以上に正確であるように見えることに気づきました。私はこれを取得します:expected there to be content "2586.6099999999997"099999999997いつあるべきか注意してください1

私のDB移行ファイルにはこれがあります-t.decimal :price, :precision => 8, :scale => 2

私のテストでは、2つの値を合計しようとしているだけで、合計949してはいけません。1637.612586.612586.60999...

何が問題になるのでしょうか?

Decimalを使用する必要がありますか、それともintegerを使用する必要がありますか?

編集:スペックコードは基本的にこれだけpage.should have_content(item1.price + 1637.61)です。item1はFactoryGirlを使用しています。

このように手動で949または949.00をテストに入れると、同じ問題が発生しますpage.should have_content(949 + 1637.61)

item1 = FactoryGirl.create(:item, :quantity => 1, :price => 949.00, :description => "macbook for 949")
4

1 に答える 1

3

データベースの列は列であるため、実際には正常に機能しているようdecimalです。問題はスペックのコードにあります:

page.should have_content(item1.price + 1637.61)

したがって、価格が949.00の場合、それは実行中949.00 + 1637.61です。これはデータベース列から独立していることを忘れないでください。これは単なるルビーコードです。したがって、float( )を10進値( )に949.00 + 1637.61追加すると評価されます。これにより、floatが返され、したがって。したがって、仕様は期待していますが、ビューは表示されています(10進数の列であるため、表示されているはずです)。1637.61949.002586.609992586.609992586.61

仕様で文字列と固定値を使用できる場合は、簡単に修正できる可能性があります。

page.should have_content("2586.61")

または、次のように、すべてを10進形式で保持していることを確認できます。

page.should have_content(item1.price + BigDecimal.new("1637.61"))
于 2012-05-09T19:37:25.447 に答える