Если я сделаю 0,3 - 0,2, он даст 0,9999999998, а не 0,1, есть ли способ заставить его давать точное десятичное число? Не могу доверять калькулятору, если он не точен.
Десятичные дроби не точны
comment
Посмотрите числа с плавающей запятой, операции и точность. Взгляните на это: stackoverflow.com/questions/1458633/
- person Chris Cousins   schedule 23.08.2018
comment
console.log ((a * 10-b * 10) / 10);
- person sumit   schedule 23.08.2018
Ответы (2)
Вы можете попробовать это решение: https://30secondsofinterviews.org/#what-does-0-1-0-2-0-3-evaluate-to-
Решением этой проблемы было бы использование функции, которая определяет, примерно равны ли два числа, путем определения значения запаса погрешности (эпсилон), на которое разница между двумя значениями должна быть меньше.
const approxEqual = (n1, n2, epsilon = 0.0001) => Math.abs(n1 - n2) < epsilon approxEqual(0.1 + 0.2, 0.3) // true
person
arkhi
schedule
23.08.2018
какую строку мне заменить? И будет ли это работать со всеми десятичными знаками, кроме случайных чисел, таких как Пи? Извините, мой друг переписал код, и я не знаю, где все находится.
- person Mrmajik45; 23.08.2018
На самом деле, на основании предыдущего комментария sunnit, вы можете сделать это:
const substract = (n1, n2, epsilon = 10) => ( n1 * Math.pow(10, epsilon) - n2 * Math.pow(10, epsilon) ) / Math.pow(10, epsilon);
, затем substract(0.3, 0.2)
- person arkhi; 23.08.2018
Вот очень быстрый ответ, который суммирует все флаги, насколько я могу:
Используйте для стандартной математики:
(.3-.2).toFixed(10); //10 can be changed to whatever you like for your string
Если вам нужно больше математических вычислений, чем это сделать:
Number((.3-.2).toFixed(10));
Последний даст вам именно то, что вы ожидали от числового типа.
person
David Kamer
schedule
23.08.2018