Как избавится от проблем формата IEEE-754, который создаёт проблемы с записью числа:
4.3-3=1.2999999999999998
0.1+0.2=0.30000000000000004
Как мне избавится от этих проблем?
Как избавится от проблем формата IEEE-754, который создаёт проблемы с записью числа:
4.3-3=1.2999999999999998
0.1+0.2=0.30000000000000004
Как мне избавится от этих проблем?
Никаких проблем нет:
Я бы лично для таких ситуаций просто использовал числа по больше, вот пример:
class CorrectFloat {
constructor(x) {
this.x = +x || 0
}
increase(y) {
return correctFloat(((this.x * 1e3) + (y * 1e3)) / 1e3)
}
decrease(y) {
return correctFloat(((this.x * 1e3) - (y * 1e3)) / 1e3)
}
get() {
return this.x
}
}
function correctFloat(n) {
return new CorrectFloat(n)
}
console.log('0.1 + 0.2 =', correctFloat(0.1)
.increase(0.2)
.get()
)
console.log('4.3 - 3 =', correctFloat(4.3)
.decrease(3)
.get()
)
Конечно с такими числами могут возникнуть проблемы, для примера, если число будет слишком большим, то тогда оно (число) не измениться вообще, но для таких ситуаций можно использовать BigInt, нужно будет создавать отдельный класс и функцию под это. Но если работать с не большими числами то всё будет работать вполне нормально. (Ну и где по меньше чисел после запятой :), в смысле после точки)