代码之家  ›  专栏  ›  技术社区  ›  Farzad

开玩笑说tobecloseto的精度没有达到预期的效果

  •  7
  • Farzad  · 技术社区  · 7 年前

    我想用 toBeCloseTo 在测试浮点数的玩笑中:

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

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

    Precision: 5-digit
    Expected: 0.01491
    Received: 0.01491570355
    

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

    使用 numDigits 控制小数点后要检查的位数

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

    我错过了什么?

    谢谢你

    1 回复  |  直到 7 年前
        1
  •  9
  •   Luke Woodward    7 年前

    这个 actual comparison used by Jest's toBeCloseTo method

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

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

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

    据我所见,这种比较背后的逻辑是,实际值将被视为接近预期值 数字符号 如果期望值是将实际值舍入到 数字符号 小数点。