Когда вы сравниваете значения в виде строк, обе стороны равны '29.85'
, поэтому вы получаете true
. Пока все просто.
Сравнение по числовому значению ведет вас в страну двоичных представлений значений с плавающей запятой. Поскольку числа хранятся в base-2, любое действительное число, которое не , выражаемое в конечное двоичное расширение , не может точно быть представлено числом с плавающей запятой.
Другими словами, каждое число, которое не может быть записано как дробь целых чисел, где знаменатель является степенью 2, не может быть представлено таким образом. Это включает в себя 1/5 и 1/10 и 597/20 (что составляет 29,85).
Поскольку эти числа не могут быть точно представлены, результат операций с такими числами зависит от порядка операций и ошибок округления и усечения, и поэтому, например, .1 + .1 + .1
не совпадает с .3
, и аналогичен для вашего вычисления.