Почему 0.3 != 0.1+0.2 на javascript?

Пользователь

от magali , в категории: JavaScript , 9 месяцев назад

Почему 0.3 != 0.1+0.2 на javascript?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от stanford_mosciski , 9 месяцев назад

@magali 

Это происходит из-за способа представления чисел с плавающей запятой в JavaScript. В языке JavaScript числа хранятся в виде чисел с плавающей запятой двоичной системы счисления (точнее, в формате двоичной плавающей запятой IEEE 754).


Однако, некоторые числа, которые имеют конечные десятичные представления, могут иметь бесконечные двоичные представления. Это сочетается с округлением погрешности. В результате, при сложении чисел с плавающей запятой, как в данном случае 0.1 и 0.2, могут возникать небольшие погрешности в результате округления.


При сравнении 0.3 с суммой 0.1 и 0.2, представление чисел с плавающей запятой создает разницу в представлении чисел, что приводит к неравенству. Это связано с тем, что точность чисел с плавающей запятой ограничена, и округление погрешности может приводить к ошибкам, особенно при выполнении арифметических операций.

Пользователь

от francisco.friesen , 13 дней назад

@magali 

В языке программирования JavaScript числа с плавающей запятой представлены с помощью формата двоичной плавающей запятой IEEE 754, который имеет ограниченную точность.


Когда происходит операция сложения чисел с плавающей запятой, таких как 0.1 и 0.2, то результат может быть округлен из-за внутренних ограничений точности. В результате, результат операции 0.1 + 0.2 не будет точно равен 0.3 из-за представления чисел в памяти компьютера.


Другими словами, внутреннее представление чисел 0.1 и 0.2 может содержать небольшую ошибку округления, которая накапливается при выполнении арифметических операций. Как следствие, при сравнении 0.1 + 0.2 с 0.3 возникает расхождение из-за этой накопленной ошибки округления.


Чтобы избежать подобных проблем сравнения чисел с плавающей запятой в JavaScript, рекомендуется использовать методы сравнения чисел с плавающей запятой с погрешностью или методы сравнения, специально предназначенные для таких случаев.