У меня есть небольшое финансовое приложение с PHP в качестве внешнего интерфейса и MySQL в качестве задней части. У меня есть древние предрассудки, и я храню денежные значения в MySQL как целое число центов. Мои формы HTML позволяют вводить значения доллара, например «156.64», и я использую PHP для преобразования этого значения в центы, а затем я храню центы в базе данных.Преобразование денежной строки PHP в целочисленную ошибку
У меня есть функция, которая как очищает значение доллара от формы, так и конвертирует ее в центы. Я стираю ведущий текст, убираю зацепляющий текст, умножаю его на 100 и преобразую в целое. Это последний шаг
$cents = (integer) ($dollars * 100);
Это прекрасно работает практически во всем, за исключением очень немногих ценностей, как «156.64», который последовательно превращается в 15663 центов за исключением. Почему он это делает?
Если я это сделать:
$cents = (integer) ($dollars * 100 + 0.5);
затем он последовательно работает. Зачем нужно добавлять это значение округления?
Кроме того, мои предрассудки о хранении денежных средств в виде целых чисел, а не значений с плавающей запятой, больше не нужны? Будут ли современные расчеты поплавка производить хорошо округленные и точные денежные значения, достаточные для поддержания 100% точного учета?
неверный. Броски вокруг. См. Мой ответ – 2010-01-14 12:32:20