@hyper_88
Изучаю WEB

Почему js так считает числа в данном примере?

Может вопрос глупый, но не могу понять логику.
Пример из известной книги "You don`t know js" (самое первое практическое задание):
const SPENDING_THRESHOLD = 200;
const PHONE_PRICE = 99.99;
const ACCESSORY_PRICE = 9.99;
var bank_balance = 303.91;
var amount = 0;
// продолжаем покупать телефоны пока у нас остаются деньги
while (amount < bank_balance) {
	// покупаем новый телефон!
	amount = amount + PHONE_PRICE;
    console.log('amount:', amount);
	// можем ли мы позволить себе аксессуар?
	if (amount < SPENDING_THRESHOLD) {
        amount = amount + ACCESSORY_PRICE;
        console.log('amount:', amount);
	}
}

Почему браузер выдает такие ответы?:
amount: 99.99
amount: 109.97999999999999 (откуда эта цифра? ...должно быть 109.98)
amount: 209.96999999999997 (и эта?)
amount: 309.96 (и куда они пропали здесь?)

P.S.: буду рад полезным ссылкам)
  • Вопрос задан
  • 110 просмотров
Решения вопроса 2
Seasle
@Seasle Куратор тега JavaScript
Потому, как IEEE 754 (0.30000000000000004).
Ответ написан
Xuxicheta
@Xuxicheta
инженер
https://habr.com/ru/post/309812/
Суть в том, что не все конечные десятичные дроби можно записать как конечные двоичные дроби. Поэтому появляются нелогичные на первый взгляд хвосты.
Надо всегда помнить что при операциях с флоатами надо определять какую-то точность.
0,1+0,2 == 0,3 будет верным, если принять точность до пяти разрядов например.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Это из-за двоичной системы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект