首页 > 解决方案 > Jest toBeCloseTo 的精度没有按预期工作

问题描述

我正在尝试toBeCloseTo在 Jest 中使用来测试浮点数:

expect(value).toBeCloseTo(0.01491, 5);

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

Precision: 5-digit
Expected: 0.01491
Received: 0.01491570355

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

用于numDigits控制要检查的小数点后多少位

所以,我在这里假设我正在比较正确的位数:我有.01491,它有5数字,所以我希望(双关语!)测试能够准确地比较这些数字并通过。

我在这里想念什么?

谢谢

标签: javascriptjestjs

解决方案


JesttoBeCloseTo方法使用的实际比较是

    Math.abs(expected - actual) < Math.pow(10, -precision) / 2

(奇怪的是,文档将第三个参数列为numDigits,而不是precision。)

所以你的测试失败了,因为期望值和实际值之间的差异超过了 0.5 × 10 -5:大约是 0.57 × 10 -5。四舍五入到小数点后五位,收到的0.01491570355值为0.01492

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


推荐阅读