ну, вы правы - вводить в заблуждение такое ошибочное утверждение.Чтобы полностью понять, вам нужно понять две вещи.
Во-первых, десятичная дробь предназначена для хранения (точно) десятичных значений с фиксированным количеством десятичных знаков.как правило, деньги (например, десятичные дроби - центы).это очень конкретный случай использования.это не точное хранилище для любого значения;это только для десятичных значений с фиксированным количеством десятичных точек, и реализация адаптирована для этого правильно.
секунда, числа с плавающей запятой предназначены для более общего типа данных - они используются для хранения «любого» значения- и реализация отражает это (так, например, реализация нацелена на охват широкого диапазона масштабов и максимально эффективную поддержку операций).в частности, он использует двоичное представление, которое не может точно представлять все десятичные значения.так, например, он может хранить точно 0,5, но не может хранить точно 0,1.это просто факт использования используемого двоичного представления - базы-2, но это означает, что для денег плавающие символы не являются хорошей идеей: если вы не можете хранить 0,10 точно как число с плавающей точкой, то любые вычисления с участием 10 центов могут накапливаться неожиданноошибки.
другими словами, оба имеют свои ограничения.единственный способ, которым десятичная дробь является «более точной», чем float, состоит в том, что ее легче понять: значения, для которых она работает, четко определены, полезны и соответствуют «естественному» представлению base 10, которое мы используем.напротив, гораздо сложнее понять, какие значения будут точно храниться с помощью чисел с плавающей точкой, а какие нет, поскольку они зависят от базового представления базы 2.