Хранение значений валюты в базе данных MySQL
этот вопрос задавался много раз раньше, но я нашел противоречивые мнения по этой теме, поэтому я подумал, что снова подниму его в надежде на более унифицированный вывод.
Я хотел бы сохранить значение валюты в моей базе данных. Предположим, что все операции являются одним и тем же типом валюты (например, USD) и что допускаются как положительные, так и отрицательные значения.
моей первоначальной мыслью было бы сохранить значение как целое число со знаком в терминах наименьшего единица связанной валюты. Например, если я хочу сохранить значение 1.25$, я бы вставить 125
в базу данных, так как наименьшая единица USD составляет $ 0.01. Хорошая вещь об этом методе заключается в том, что MySQL автоматически округляется до ближайшего целого числа. Например, если значение доллара равно $ 1.259, я мог бы вставить 125.9
, который будет автоматически округлен и сохранен как 126
или $1.26.
Итак, что вы думаете? Это разумный подход или есть лучший? способ?
2 ответов
финансовые данные могут храниться как DECIMAL(p,s)
где p-количество значащих цифр, а s-масштаб (количество мест справа от десятичной точки). См.документация MySQL.
также от О'Рейли Высокая Производительность MySQL, Глава 3:
"...вы должны использовать DECIMAL только тогда, когда вам нужны точные результаты для дробные числа-например, при хранении финансовых данных."
от О'Рейли!--16-->Изучение MySQL:
DECIMAL
is,"...Часто используемый числовой тип. Сохраняет фиксированную точку номер, такой как зарплата или расстояние..."
DECIMAL
"...Сохраняет числа с плавающей запятой, где точность критические, например, для денежных ценностей."
нет ничего плохого в подходе, который вы описываете. В этом вопросе нет ни правильного, ни неправильного.
вы должны иметь в виду, что для отображения $ value пользователю вам нужно будет всегда выполнять операцию деления или какое-то форматирование.
будет ли проще отлаживать ваши формулы / вычисления, если все было в центах или долларах? Будете ли вы отображать значения в центах или долларах? так далее.
сохранить его простым, но в любом случае вам придется использовать десятичные.