首页 > 解决方案 > 在 RSpec 中比较十进制值的正确方法?

问题描述

我有这个规范来检查预期的数字:

  expect(animal_cost).to eq(0.7771118644067795e5)

我收到一条错误消息:

  expected: 77711.18644067795
        got: 0.7771118644067795e5

如您所见,我得到的数字与我预期的相同,所以我很困惑为什么会失败。如何设置规格?

animal_cost.class是一个 BigDecimal。

标签: ruby-on-railsrubyrspecdecimal

解决方案


使用 rspec 验证浮点数的最佳方法是使用be_within匹配器。浮点数不能以二进制形式在数学上完全准确地表示。肯定会有一些舍入误差。

在你的情况下,一个人会写:

expect(animal_cost).to be_within(0.001).of(0.7771118644067795e5)

推荐阅读