dilikpulatov
@dilikpulatov
веб-программист

PostgreSQL — какой тип данных лучше использовать для валюты?

В проекте точности суммы имеет значение.
Например 123456789,000456 и т.д
Хотел использовать NUMERIC но прочитал в интернет что вычисления NUMERIC значений обычно медленнее, чем целые числа. А для проекта скорость вычисления тоже важен. Остается real или double precision. Стоит ли их использовать? Или NUMERIC не так уже медленнее?
  • Вопрос задан
  • 1057 просмотров
Решения вопроса 1
gbg
@gbg
Любые ответы на любые вопросы
НИКОГДА. НЕ. ПИХАЙТЕ. ДЕНЬГИ. В ЧИСЛА. С. ПЛАВАЮЩЕЙ. ЗАПЯТОЙ.

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

Юзайте numeric, который был придуман именно, блин, для этой цели.

И запомните, что преждевременная оптимизация приносит зачастую больше проблем, чем пользы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Akela_wolf
Extreme Programmer
Вообще, если говорить о деньгах, то крайне маловероятно что у вас будут доли копеек (центов и т.п.). Поэтому, можно хранить денежные суммы в виде пары "целое число" (long) + "код валюты" (целое или строка, код валюты ISO). К этой структуре, тогда, нужно иметь справочник валют, в котором будет точность валюты т.е. множитель для перевода из рублей в копейки, из долларов в центы, из евро в евроценты (1 к 100). А, например, у юаня этот множитель будет 1, так как эти денежные единицы не делятся на доли. У биткоина этот множитель будет 10^8 (сатоши).

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

Войдите, чтобы написать ответ

Похожие вопросы