【发布时间】:2016-11-14 00:58:01
【问题描述】:
为我的 Javascript 程序编写一些处理二进制的测试用例,现在我只是使用 stringify 来检查值和预期值是否相等:
JSON.stringify(val) === JSON.stringify(expected)
这很好用,除非我有浮点值。这就是发生的事情:
Given Value: [10,20,30,32.400001525878906,{"test":3,"asdf":23}]
Expected Value: [10,20,30,32.4,{"test":3,"asdf":23}]
Test Failed!
所以我想我不能再使用 stringify 来检查我的两个对象/数组是否相等。检查两个可能深度嵌套的对象/数组是否相等同时还考虑浮点值的好方法是什么?也就是说,如果两个浮点值 99.99% 相同或其他情况,则应认为它们相等。
【问题讨论】:
-
你需要写一个递归等价测试器。当它得到一个浮点数时,它需要将它们与容差进行比较,而不是
==。 -
使用 JSON.stringify 比较对象不是一个好主意,因为不能保证顺序,所以两个对象可能具有相同的属性和值,但评估结果不“相等”。你需要遍历属性和值,有many, many questions about that already。
标签: javascript binary floating-point equality