故事:
在Python内置unittest
框架中,有一个"近似相等"断言通过assertAlmostEqual()
方法实现:
x = 0.1234567890
y = 0.1234567891
self.assertAlmostEqual(x, y)
要检查的小数位数是否可配置。
而且,有一个numpy.testing.assert_almost_equal()
也适用于浮点数组:
import numpy.testing as npt
import numpy as np
npt.assert_almost_equal(np.array([1.0,2.3333333333333]), np.array([1.0,2.33333334]))
问题:
如何使"几乎相等"用于浮点数和浮点数组的JavaScript / Jasmine 中的断言?
答案 0 :(得分:15)
对于单个浮动,请使用toBeCloseTo
:
expect(x).toBeCloseTo(y, 7)
对于一个float数组,你可以做的最好就是遍历它并为每对元素调用toBeCloseTo
(或编写你自己的匹配器)。请参阅Expect an array of float numbers to be close to another array in Jasmine。
答案 1 :(得分:5)
您可以为float类型添加自定义相等性测试程序。它将在单个float和数组中的每个float上调用:
beforeEach(function () {
jasmine.addCustomEqualityTester(function floatEquality(a, b) {
if (a === +a && b === +b && (a !== (a|0) || b !== (b|0))) { // if float
return Math.abs(a - b) < 5e-8;
}
});
});
it("Should compare array of floats", function() {
expect([0.1234567890]).toEqual([0.1234567891]); // OK
expect([0.12345]).toEqual([0.12346]); // FAIL
});