Javascript 开玩笑说要闭嘴';s精度未按预期工作

Javascript 开玩笑说要闭嘴';s精度未按预期工作,javascript,jestjs,Javascript,Jestjs,我在开玩笑地尝试使用toBeCloseTo测试浮点数: expect(value).toBeCloseTo(0.01491, 5); 但当我运行测试时,我看到了以下结果: Precision: 5-digit Expected: 0.01491 Received: 0.01491570355 当我将精度设置为4时,测试通过,但我感到困惑。在报告中,它说: 使用numDigits控制小数点后要检查的位数 所以,我在这里假设我比较的是正确的位数:我有.01491,它有5位数,所以我希望(双关语!

我在开玩笑地尝试使用
toBeCloseTo
测试浮点数:

expect(value).toBeCloseTo(0.01491, 5);
但当我运行测试时,我看到了以下结果:

Precision: 5-digit
Expected: 0.01491
Received: 0.01491570355
当我将精度设置为
4
时,测试通过,但我感到困惑。在报告中,它说:

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

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

我错过了什么

谢谢

这是

Math.abs(预期-实际)
(奇怪的是,文档中列出的第三个参数是
numDigits
,而不是
precision

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


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

谢谢@Luke,将其视为
值四舍五入所得到的提示非常有用,因此将其视为ceil/floor(round)值而不是子字符串?@Dheeraj,是的。假设预期值为
0.01491
,实际值为
0.0149099977974
。尽管实际值与预期值相差约2.2×10^(-10),但该实际值将无法通过子字符串检查。
    Math.abs(expected - actual) < Math.pow(10, -precision) / 2