我目前正在为有发票的工作建立内部网。我目前正在为此进行测试,以确保增值税汇总正确等。

我已经注意到,在某种程度上,Rails / Ruby似乎更准确。我得到这个:expected there to be content "2586.6099999999997"。请注意099999999997何时应为1

在我的数据库迁移文件中,有这个-t.decimal :price, :precision => 8, :scale => 2

在我的测试中,我仅尝试将两个值9491637.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"))

10-06 10:16