Как хранить деньги в int в базе данных?

Задался вопросом как хранить деньги в базе. Чаще всего советуют хранить в int (умножать, делить на 100)

Но если пополнить счет на 0.333 долларов, при умножений на 100 получим 33.3

Я так понял, чтобы сделать универсальный вариант для всех валют, надо умножать делить на 100000000, чтобы учесть даже биткойн?
  • Вопрос задан
  • 487 просмотров
Решения вопроса 3
insighter
@insighter
-First time? - Huh? (C#, React, JS)
Чаще всего советуют хранить в int


Что за советы вредные такие. Любая СУБД позволяет указать точность числа после запятой, пользуйтесь этим.
Если не ошибаюсь для всех денег мира двух знаков после запятой достаточно. Биткоин это не деньги. )))

Ну и конечно, если в программе есть специфика типа валютных курсов, там точность считается и до 4 и до 6 знаков. Зачем все сваливать в кучу и делать универсальное решение. Определитесь что именно будет хранить ваша программа.

PS понятно как хранить денежные величины. А вот работать с ними лучше как десятичными дробями, а не как с числами с плавающей точкой. Хоть на бэкенде, хоть на фронте.
Ответ написан
Комментировать
Bandicoot
@Bandicoot
Вась-программист
decimal

За 2 года работы не было проблем ни с битком, ни с любой другой валютой.
Ответ написан
Комментировать
@Myclass
Уверен - универсального решения нет. Я использую всегда decimal с большой точностью после запятой. Но с головой подхожу к тому, какие, когда и где операции с этими числами делать можно, а когда- нельзя.
Высказывания типа, что с тем или иным подходом - не было проблем - от лешего. Тк. и хранение в int с последующим переводом например в другую валюту или умножения для вычисления подоходного налога требует работы с числами с плавающей точкой. Хотим мы этого или нет. А узнать, какие подводные камни бывают при этом можно узнать здесь
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@alexshipin
javascript-developer
Ответ написан
Комментировать
Real_Fermer
@Real_Fermer
Программист PHP
да. все правильно переводить в копейки
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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