1

我目前正在为有发票的工作建立一个 Intranet。我目前正在为其编写测试,以确保增值税汇总正确等。

我注意到在某些方面,Rails/Ruby 似乎比它需要的更准确。我明白了:expected there to be content "2586.6099999999997"。注意099999999997它应该是什么时候1

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

在我的测试中,我只是试图将两个值相加,949并且不1637.61应该相加。2586.612586.60999...

会有什么问题?

我应该使用十进制还是应该使用整数?

编辑:规范代码基本上就是这个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. 请记住,这与您的数据库列无关,它只是 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"))
于 2012-05-09T19:37:25.447 回答