Size: a a a

2020 May 23

S

Sergey in Laravel Pro
Т.к. валюьа одна и точно очень нескоро будут другие, то решил не париться с конвертацией, а просто буду по умолчанию хранить код рубля
источник

n

nighthtr [backend] in Laravel Pro
Sergey
Как-то работал в компании, которая делает хранилища данных и консалтинг, в том числе для банков, типа втб24. Так вот у них в бд (да, там оракл, терадата и тд) валюту хранили в ISO коде, а значение - в DECIMAL(19,4). Проблема как раз в php: в самом языке нет поддержки операций над числами с фиксированной точностью. А MySQL PDO драйвер преобразует DECIMAL в строку, и изменить это поведение нельзя. Я нашёл пакет php-decimal/php-decimal (также надо ставить расширение для php). И написал свой кастомный cast класс, который из строки конструирует Decimal объект, а при "отправке" в бд преобразует в строку. При этом, как заявлено на сайье с доками, операции над этим Decimal быстрее, чем bcmath.
bcmath, gmp, или в int если позволяет
источник

S

Sergey in Laravel Pro
Я правильно понимаю, что при таком подходе не должно быть проблем?
источник

k

kopoBko in Laravel Pro
nighthtr [backend]
bcmath, gmp, или в int если позволяет
в int хранят некоторые платежные сервисы. С рублями в принципе удобно, т.к. по сути это количество копеек.
источник

S

Sergey in Laravel Pro
nighthtr [backend]
bcmath, gmp, или в int если позволяет
А есть какие-то преимущества у подхода с целыми числами?
источник

n

nighthtr [backend] in Laravel Pro
Не знаю насчёт Decemal, на входе может парсить строки типа "$ 1.00"
источник

n

nighthtr [backend] in Laravel Pro
nighthtr [backend]
Не знаю насчёт Decemal, на входе может парсить строки типа "$ 1.00"
источник

n

nighthtr [backend] in Laravel Pro
под капотом все расчеты в целых, чем считать 3 варианта
источник

n

nighthtr [backend] in Laravel Pro
все операции уже есть. можно делить 3 копейки пополам, не опасаясь потерять 1 копейку или наоборот лишнюю кому то дать
источник

n

nighthtr [backend] in Laravel Pro
опять же мультивалютность и конвертации, все уже написано и проверено
источник

S

Sergey in Laravel Pro
nighthtr [backend]
все операции уже есть. можно делить 3 копейки пополам, не опасаясь потерять 1 копейку или наоборот лишнюю кому то дать
У меня есть также своя "валюта", которую надо также считать с фиксированной точностью
источник

S

Sergey in Laravel Pro
И курс этой "валюты" зависит от тарифа юзера
источник

n

nighthtr [backend] in Laravel Pro
тоже можно. я заводил всякую крипту, которой нет в библиотеке
источник

n

nighthtr [backend] in Laravel Pro
сетку для обмена ты сам подаешь в эту либу
источник

n

nighthtr [backend] in Laravel Pro
хранение данных хоть в bigInt, хоть decimal, не принципиально
источник

n

nighthtr [backend] in Laravel Pro
даже float можно, только не считать в нем
источник

S

Sergey in Laravel Pro
В принципе, эта внутренняя валюта покупается за рубли, и затем тратится на сайте, обратно в рубли нельзя её перевести, то есть один раз можно и посчитать вручную по тарифу юзера
источник

n

nighthtr [backend] in Laravel Pro
Sergey
В принципе, эта внутренняя валюта покупается за рубли, и затем тратится на сайте, обратно в рубли нельзя её перевести, то есть один раз можно и посчитать вручную по тарифу юзера
конвертировать можно в любую сторону, ограничиваешь только своей бизнес логикой
источник

n

nighthtr [backend] in Laravel Pro
источник

n

nighthtr [backend] in Laravel Pro
источник