amount * 100 чтоб хранить только integers. Вопрос: как сделать лучше – что бы только бек об этом знал, т.е. перед отдачей данных на фронт делить их на 100, или пусть фронт обрабатывает decimal values и шлет на бек только integer? Ибо я вижу минусы в каждом из подходов, потому просто интересно как лучше (я не бекендер, опыта ноль)
Делай так, как подскажет сердце
Что это значит?
Лучше отправляй так как в бд сохраняешь
Сердце подсказывает что делить на 100 для каждого респонса это пизд*ец
Из того что я помню, его нужно юзать только когда его рил нужно юзать, потому что в common-cases он только боль вызывает
Отдавай на фронт копейки
Объясните позицию пожалуйста :) Потому что в данный момент на фронте я просто вынес трансформации в слой апи (как для get, так и для post/put), который еще и кешируется, так что по факту фронт работает напрямую с decimals, и это теперь не мешает
Потому что раньше да, я прям в коде, в формах и в UI делал fromSystemAmount – тут мой провтык, над было сразу в слой апи вынести этот трансформ
Система работает только с одной валютой, или с разными?
С разными На беке храню amount + refAmount refAmount – amount в base валюте юзера refAmount = amount * currencyRate (чтобы не пересчитывать каждый раз + хранить актуальный курс на дату транзакции)
А странные числа типа 19.200000003, пока не получал?
При делении на 100 получал, конечно :) Но: 1) В UI все числа проходят через format для юзер-локали, потому эта проблема отпадает из-за toFixed(2) 2) toSystemAmount когда обратно умножает на 100, обрезает все decimals В итоге – в данный момент 0 проблем Но мне интересно какие конкретно кейсы у вас есть на уме, ибо я в этой области опыта не имею)
первое, что приходит в голову - на фронте сами разберутся, как им приводить в нужный вид. Может округлят, может отбросят копейки, или вообще прописью отрисуют Правда если нужен лёгкий фронт, то готовить всё нужно на беке
А, ну это да, понятно В любом случае, что decimal, что integer, фронт должен обработать используя .toLocaleString(), так что «усложнения» никакого нету)
Обсуждают сегодня