Сравнение достаточно близких чисел в JavaScript - PullRequest
1 голос
/ 14 июня 2019

Следующая ошибка JavaScript застала меня врасплох:

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

когда я начал тестировать математику, используя тестовый фреймворк Mocha.

Есть ли в Мокко стандартный способ сравнения чисел с незначительной десятичной разницей?

Я ищу решение, в котором можно указать точность сравнения в процентах.

UPDATE

Так что в основном мне нужно реализовать такую ​​функцию:

/**
 * @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 голосов
/ 14 июня 2019

Mocha - тестовый бегун / фреймворк. Это просто заботится о том, выдает ли что-то ошибку или нет в тесте. Утверждения / проверки принадлежат библиотекам утверждений - это не то, о чем Mocha заботится / обеспечивает функциональность. Вы можете использовать любую библиотеку утверждений с Mocha, например, chai или неожиданно. Посмотреть весь список здесь: 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"))
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...