我目前正在为有发票的工作构建内部网。我目前正在为它编写测试,以确保增值税总和正确等等。
我注意到,在一些数量上,Rails / Ruby似乎更准确,它需要。我明白了:expected there to be content "2586.6099999999997"
。请注意099999999997
何时应为1
。
在我的数据库迁移文件中,我有这个 - t.decimal :price, :precision => 8, :scale => 2
在我的测试中,我只想添加两个值949
和1637.61
,这些值应该2586.61
而不是2586.60999...
。
会出现什么问题?
我应该使用Decimal还是应该使用整数?
编辑:规范代码基本上只是这个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")
答案 0 :(得分:3)
听起来您的数据库列实际上正常运行,因为它是decimal
列。问题出在您的规范代码中:
page.should have_content(item1.price + 1637.61)
因此,如果价格为949.00,它正在进行949.00 + 1637.61
。请记住,这与您的数据库列无关,它只是ruby代码。因此949.00 + 1637.61
被评估为将float(1637.61
)添加到十进制值(949.00
),该值返回一个浮点数,因此返回2586.60999
。所以规范期待2586.60999
,但视图显示2586.61
(因为它们应该是十进制列)。
如果您可以在规范中使用字符串和固定值,那么这可能很容易解决:
page.should have_content("2586.61")
或者,您可以确保以十进制格式保存所有内容,例如:
page.should have_content(item1.price + BigDecimal.new("1637.61"))