Jest toBeCloseTo的精度不按预期工作

Far*_*zad 9 javascript jestjs

我正在尝试toBeCloseTo在Jest中测试一个浮点数:

expect(value).toBeCloseTo(0.01491, 5);
Run Code Online (Sandbox Code Playgroud)

但是当我运行我的测试时,我看到了这个结果:

Precision: 5-digit
Expected: 0.01491
Received: 0.01491570355
Run Code Online (Sandbox Code Playgroud)

当我将精度设置为时4,测试通过,但我很困惑.在文档中,它说:

使用numDigits控制多少位小数点后检查

所以,我在这里假设我正在比较正确的位数:我有.01491,有5数字,所以我希望(双关语!)测试比较那些数字和传递.

我在这里错过了什么?

谢谢

Luk*_*ard 11

Jest toBeCloseTo方法使用实际比较

    Math.abs(expected - actual) < Math.pow(10, -precision) / 2
Run Code Online (Sandbox Code Playgroud)

(奇怪的是,文档列出了第三个参数numDigits,而不是precision.)

因此,您的测试失败,因为预期值和实际值之间的差异超过0.5×10 -5:它大约是0.57×10 -5.舍入到五位小数,收到的值0.014915703550.01492.

据我所知,比较背后的逻辑是,numDigits如果预期值是将实际值四舍五入到numDigits小数位,那么实际值将被认为接近预期值到数字内.

  • 谢谢@Luke,将其视为“从舍入值中得到的值”的提示非常有帮助 (2认同)