2012-06-08 3 views
12

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

Я хотел бы сохранить валюту в моей базе данных. Предположим, что все записи представляют собой один и тот же тип валюты (например, доллар США) и что допустимы как положительные, так и отрицательные значения.

Моя первоначальная мысль заключалась в том, чтобы сохранить значение как целое число со знаком в терминах наименьшей единицы соответствующей валюты. Например, если я хочу сохранить значение $ 1,25, я бы вложил 125 в базу данных, так как наименьшая единица USD составляет 0,01 доллара США. Самое приятное в этом методе заключается в том, что MySQL автоматически округляется до ближайшего целого. Например, если значение доллара составляет $ 1,259, я могу вставить 125.9, который автоматически будет округлен и сохранен как 126 или $ 1,26.

Итак, что вы думаете? Является ли это правильным подходом или есть лучший способ?

+1

'DECIMAL (р, s)' http://dev.mysql.com/doc/refman/5.5/en/fixed-point-types.html – DavidO

+0

Ах, что делает гораздо больше смысла. Тогда нет необходимости делить на 100 перед отображением номера. Благодаря! –

ответ

13

Финансовые данные могут быть сохранены как DECIMAL(p,s), где p - количество значащих цифр, а s - масштаб (количество мест справа от десятичной точки). См. The MySQL documentation.

Кроме того, из О'Рейли High Performance MySQL, глава 3:

«... Вы должны использовать DECIMAL только тогда, когда вам нужны точные результаты для дробных чисел - например, при хранении финансовых данных.»

От Learning MySQL О'Рейли:

DECIMAL есть "... Обычно используется числовой тип Хранит фиксированной точкой число, например, заработной платы или расстояние ...".

И MySQL Pocket Reference:

DECIMAL»... Sto res с плавающей запятой, где точность критическая, например, для денежных значений ».

2

Нет ничего плохого в том, что вы описываете. В этом вопросе нет правильного или неправильного решения.

Вы должны иметь в виду, что для отображения значения $ пользователю необходимо всегда выполнять операцию разделения или какое-то форматирование.

Будет ли проще отлаживать ваши формулы/вычисления, если все было в центах или долларах? Будете ли вы показывать значения в центах или долларах? и т. д.

Держите его простым, но в любом случае вам придется использовать десятичную дробь.

+1

На самом деле, если вам нужна точность, вы не можете хранить ее как int, потому что вы потеряете дробные значения, которые необходимы для таких вещей, как государственные налоги. – Alan

Смежные вопросы