сделать так, чтобы при отдаче модели на клиент цена автоматически переводилась в доллары (/ 100)? Или нужно везде следить за этим и переводить вручную?
Надо написать на select
не очень если честно понял, что за select?
Тебе надо переводить на доллары при методе find?
нет, ну не везде по крайней мере, т.е. например я могу взять строку с базы, работать с центами, а при отдаче ответа на клиент цена уже должна приходить в долларах
Ну вот при запросе find умножай и все
ну даже если так, получается все равно при каждом разе придется это учитывать? я имею ввиду может есть какой-то способ один раз это прописать где-нибудь (возможно, чтобы при find появлялось автоматически доп. поле) и "забыть" об этом
Тогда храни ещё в долларе
Давай начнём с базового. При операциях с плавающей точкой происходит потеря точности. Поэтому ты хранишь цену в целочисленных центах, что логично. Теперь по непонятной причине ты хочешь что бы база вместо нормального целочисленного цента возвращала тебе на бэк абсолютно непредназначенный для точных вычислений флоат. За такое на код ревью обычно бьют по рукам. Центы в доллары нужно конвертировать исключительно на фронте, на этапе отображения пользователю. В остальное время работа идёт только с центами
Вообще-то я не говорил, что мне нужно, чтобы база отдавала в бэк флоат, а наоборот, чтобы база отдала центы (как и должно быть), я работал с центами, и только при отдаче данных на клиент отдавались баксы А насчет того, что правильнее конвертить цену на фронте - есть какое-то более подробное объяснение почему так?
Про операции с плавающей точкой и потерю точности осведомлен?
Это я знаю, зачем на фронте вообще что-то делать с ценой, кроме как показывать ее пользователю?
Берём банальный пример с корзиной интернет магазина. Пользователь накидал себе в корзину товаров, ещё и промокод на % скидки активировал вредитель. Фронт посчитал флоаты и отобразил одну сумму, а бэк насчитал другую. Расхождение естественно копеечное, но зачем на ровном месте создавать неконсистентность?
А, про это я не подумал, тогда да, согласен.
Обсуждают сегодня