Пишу софт для управления личными финансами, где веду учет трат и создаю штуковину, которая рекомендует мне какие активы продавать или покупать.
Столкнулся с тем, что хранить финансовые данные в float это скажем так, не очень хорошая идея. Для меня это не сильно критично, но даже не знаю, что делают большие компании.
Если коротко, то значения в float не совсем то, чем кажутся на первый взгляд. Например, если вы сложите 1.00 и 2.00, то может получиться что-нибудь типа 3.0000001 и это совсем печально. Не критично конечно, но так быть не должно.
Есть еще такой формат данных как “Money”, но он имеет очень ограниченный кейс для использования. И даже
Postgres Wiki рекомендует его избегать. Кроме определенных узких случаев.
Насколько я понимаю, самый разумный способ это хранить в наименьшем int. Например, 1.00 рубль = 100. 1 рубль и 12 копеек = 112.
Так что избегайте флоата для хранения денег.
А вот еще несколько советов по PostgreSQL с той же страницы:
Don't use upper case table or column names
Don't use BETWEEN (especially with timestamps)
Don't use timestamp (without time zone)
Don't use timestamp (without time zone) to store UTC times
Don't use the timetz type. You probably want timestamptz instead
Don't use timestamp(0) or timestamptz(0)