比较JavaScript中足够接近的数字

时间:2019-06-13 22:07:40

标签: javascript mocha

以下JavaScript异常使我措手不及:

console.log(1 - 0.1 - 0.1 === 1 - 0.2); // true
console.log(1 - 0.2 - 0.2 === 1 - 0.4); // false

当我开始使用Mocha测试框架测试一些数学运算时。

摩卡咖啡中是否存在比较小数位数可忽略的数字的标准方法?

我正在寻找一种解决方案,可以将比较精度指定为百分比。

更新

所以基本上我需要实现这样的功能:

/**
 * @param a
 * @param b
 * @param accuracy - precision percentage.
 * @returns
 * 0, if the difference is within the accuracy.
 * -1, if a < b
 * 1, if a > b
 */
function compare(a, b, accuracy) {
}

复杂度是accuracy是百分比值。

示例:

compare(1.001, 1.002, 0.1) => 0
compare(12345, 12346, 0.1) => 0

1 个答案:

答案 0 :(得分:0)

Mocha是一个测试运行器/框架。它只是在乎测试中是否会引发错误。断言/检查属于断言库– Mocha不会为它提供服务或为其提供功能。您可以自由地在Mocha中使用任何断言库,例如chai或Surprised。在此处查看整个列表:https://github.com/mochajs/mocha/wiki

根据您的评论,您可能会遇到类似这样的情况:

function compare(a, b, accuracy) {
  const biggest = Math.max(Math.abs(a), Math.abs(b))
  const epsilon = biggest * accuracy
  if (Math.abs(a - b) > epsilon) {
    throw(new Error("message"))
  }
}