我正在尝试在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.01491570355
为0.01492
。据我所知,这种比较背后的逻辑是,如果期望值是通过将实际值四舍五入到
numDigits
小数位得到的,则实际值将被认为接近期望值,在numDigits
位以内。