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

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

但是,当我运行测试时,会看到以下结果:
Precision: 5-digit
Expected: 0.01491
Received: 0.01491570355

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



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

我在这里想念什么?

谢谢

最佳答案

actual comparison used by Jest's toBeCloseTo method

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

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

因此您的测试失败了,因为期望值与实际值之差超过0.5×10-5:大约是0.57×10-5。四舍五入到小数点后五位,接收到的值0.014915703550.01492

据我所知,这种比较背后的逻辑是,如果期望值是通过将实际值四舍五入到numDigits小数位得到的,则实际值将被认为接近期望值,在numDigits位以内。

09-19 01:45