javascript - Jest toBeCloseTo 的精度没有按预期工作
问题描述
我正在尝试toBeCloseTo
在 Jest 中使用来测试浮点数:
expect(value).toBeCloseTo(0.01491, 5);
但是当我运行测试时,我看到了这个结果:
Precision: 5-digit
Expected: 0.01491
Received: 0.01491570355
当我将精度设置为 时4
,测试通过了,但我很困惑。在文档中,它说:
用于
numDigits
控制要检查的小数点后多少位
所以,我在这里假设我正在比较正确的位数:我有.01491
,它有5
数字,所以我希望(双关语!)测试能够准确地比较这些数字并通过。
我在这里想念什么?
谢谢
解决方案
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
小数位后得到的值,那么实际值将被认为接近预期值。
推荐阅读
- django - 如何以最佳效率在 Django 中查询?
- android - 在 Android 中从中间到顶部打开底部对话框
- python - IndexError:使用python连接到SFTP服务器时列出索引超出范围
- vb.net - 通过 vb.net 在 powershell 中使用存储的凭据
- spring-integration - 如何为spring集成流添加try catch异常以实现嵌套事务
- ansible - 如何使用拆分方法检索字典值?
- node.js - ssh 和 nodejs 应用程序
- python - 在创建 deepcopy 时尝试腌制未知类型
- flutter - 使用 map 而不是 for 语句使类模型中的列表返回零
- r - 在 R 中使用 ggplot 将移位图的点与另一个图连接起来