Хранение цены в PHP. Что лучше double или string?

Я делал "объект продукта" для своего приложения, и я устанавливал атрибуты, когда внезапно я попал в атрибут цены и наткнулся на него с вопросом, какой тип лучше выбрать? Я понимаю, что для PHP это не так важно, но, скажем, для MySQL это так.
Есть предложения?

7 ответов


реальные типы чисел лучше для чисел, потому что вы можете делать правильные сравнения с ними (например, price 677), а затем разделил бы на 100, прежде чем представить число пользователю. Таким образом, вы получаете числовые операции в базе данных, и вы получаете точность (при условии, что точность 1 цент достаточно).


Не подходит.

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


есть подробное объяснение" лучших практик " решения для этого вопроса в это так вопрос. Использование целых чисел также является приемлемой альтернативой. Несмотря на это, лучше всего использовать одно и то же решение во всем приложении для облегчения сравнения и арифметики.

помните, что вы всегда можете изменить способ просмотра данных перед их представлением пользователю, используя number_format () или что-то еще.


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

т. е. вы не хотите, чтобы 6.77 был больше 12.54, и вы не хотите чего-то с ценой 6.4312313141.


вопрос, который я всегда задаю себе при рассмотрении строки или числа (int, double и т. д.) типы данных: "я собираюсь делать математику с ними?- Если ответ "да", что, как я полагаю, относится к вашему случаю, я соглашусь с числовым значением. Если ответ отрицательный,я выбираю строковое значение.


Я лично предпочитаю целые числа хранить его как центовое значение, 650 вместо 6.50. Легкая сортировка, отсутствие проблем округления и простота отображения в любом формате для ваших пользователей.


вы, возможно, захотите, чтобы проверить время и деньги проект на sourceforge. Полное раскрытие: я на самом деле не просматривал проект много, но, похоже, это даст вам некоторые хорошие идеи о работе с такими вещами.