Ответ 1
В Руководство по плавающей запятой:
Почему не мои цифры, например, 0,1 + 0,2, составляют хороший раунд 0,3 и вместо этого я получаю странный результат, например 0.30000000000000004?
Поскольку внутренне компьютеры используют формат (двоичный с плавающей запятой) которые не могут точно представлять число, например 0,1, 0,2 или 0,3.
Когда код компилируется или интерпретируется, ваш "0,1" уже округленное до ближайшего номера в этом формате, что приводит к небольшому ошибка округления даже до того, как произойдет расчет.
Что можно сделать, чтобы избежать этой проблемы?
Это зависит от того, какие вычисления вы делаете.
- Если вам действительно нужны ваши результаты, чтобы точно добавить, особенно когда вы работаете с деньгами: используйте специальный десятичный тип данных.
- Если вы просто не хотите видеть все эти дополнительные десятичные знаки: просто отформатируйте результат округляется до фиксированного числа десятичных знаков при его отображении.
- Если у вас нет десятичного типа данных, альтернативой является работа с целыми числами, например. делать денежные расчеты целиком в центах. Но это больше работы и имеет некоторые недостатки.