我目前正在为有发票的工作建立内部网。我目前正在为此进行测试,以确保增值税汇总正确等。
我已经注意到,在某种程度上,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...
。
有什么问题吗?
我应该使用小数还是整数?
编辑:规范代码基本上就是这个page.should have_content(item1.price + 1637.61)
。 item1正在使用FactoryGirl。
当像这样page.should have_content(949 + 1637.61)
手动将949或949.00放入测试中时,也会遇到相同的问题
item1 = FactoryGirl.create(:item, :quantity => 1, :price => 949.00, :description => "macbook for 949")
最佳答案
听起来您的数据库列实际上是应有的功能,因为它是一个decimal
列。问题出在您规范的代码中:
page.should have_content(item1.price + 1637.61)
因此,如果价格为949.00,则为
949.00 + 1637.61
。请记住,这与数据库列无关,它只是ruby代码。因此,将949.00 + 1637.61
评估为在十进制值(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"))