# 比较浮点数组时rspec测试的取整问题(Rounding problem with rspec tests when comparing float arrays)

3 IT屋

There is a method which result I want to check:

``` result.should  == [1.0,2.0,3.0]
```

But I get an error:

```   expected: [1.0, 2.0, 3.0]
got: [1.0, 2.0, 3.0] (using ==)
```

I think the problem in rounding, but I don `t know how compare them, for example with a deviation of 0.1.

Thank you, apneadiving. I wrote my own matcher, if it help someone:

```RSpec::Matchers.define :be_closed_array do |expected, truth|
match do |actual|
same = 0
for i in 0..actual.length-1
same +=1 if actual[i].round(truth) == expected[i].round(truth)
end
same == actual.length
end

failure_message_for_should do |actual|
"expected that #{actual} would be close to #{expected}"
end

failure_message_for_should_not do |actual|
"expected that #{actual} would not be close to #{expected}"
end

description do
"be a close to #{expected}"
end
end
```

Use:

``` .should be_close
```

Or even:

``` .should be_within
```

` 结果。应该== [1.0,2.0,3.0]   `

` 预期：[1.0、2.0、3.0] 得到：[1.0、2.0、3.0]（使用==）  `

`  RSpec :: Matchers.define：be_closed_array可以|期望，真相|  match做|实际|  same = 0  for i in 0..actual.length-1  same + = 1，如果Actual [i] .round（truth）==预期[i] .round（truth ）结束同样==实际值。长度结束  failure_message_for_should应该|实际| "预计＃{actual}将接近＃{expected}"" 结束  failure_message_for_should_not可以| actual | "预期＃{actual}不会接近＃{expected}" 结束 描述确实"接近＃{expected}" 结束结束  `

` 。应该be_close   `

``` 。应在 之内pre>   在此处引用 http：// rubydoc.info/gems/rspec-expectations/2.4.0/RSpec/Matchers
本文地址：IT屋 » 比较浮点数组时rspec测试的取整问题
```