Подтвердить что ты не робот

Сохранение значений валюты в базе данных MySQL

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

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

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

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

4b9b3361

Ответ 1

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

Также из O'Reilly Высокопроизводительный MySQL, глава 3:

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

Из O'Reilly Изучение MySQL:

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

И Справочник по MySQL Pocket:

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

Ответ 2

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

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

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

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