@zkrvndm
Софт для автоматизации

Как записать в JSON число только с ДВУМЯ цифрами после точки?

Пример:
json_encode([ 'Цена' => (float)$_GET['price'] ], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

В переменной $_GET['price'] строка с содержимым "2408570.45".

Получаю на выходе:
{
    "Цена": 2408570.450000000186264514923095703125
}
  • Вопрос задан
  • 217 просмотров
Решения вопроса 1
@zkrvndm Автор вопроса
Софт для автоматизации
Проблема была в настройках хостинга, конкретно же в директиве serialize_precision.
Обычно ставится -1 на новых версиях php, у меня же значение было иное, оттуда и проблемы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Вам программа подсказывает что вы неверно работаете с сущностью "бабло".
Бабло должно быть строкой или интом.
Вы делаете из него флоат и получаете ровно то, с чем борятся говоря "бабло должно быть строкой".

1) Функции связанные с деньгами это отдельный класс в приложении который использует для их расчета функции bcmath, умеющие считывать произвольное число знаков до и после запятой и считать число не взирая на разряд.

2) Для работы с деньгами используют библиотеку phpmoney где большая часть нужных вам вещей уже завернута, есть парсер и форматтер, поддерживаются валюты и с гемором но можно даже создавать свои. К сожалению, парсинг валют с сайта банков вы скорее всего будете писать сами, т.к. предложенный вариант парсит их из какого-то источника, который не учитывает ситуацию в вашей стране, но сама поддержка переводов валюта-валюта есть.

3) Для работы с деньгами дописывают функции "округление в большую сторону и округление в меньшую сторону с учетом копейки в последнем разряде", их в пхп нет, они считаются "не математическими", как и вся экономика основаны на "кто кому чего должен" а не "сколько будет". Так округление 1.0005 до двух знаков равно 1.00, тогда как экономика считает что 1.01. И тут тоже два пути. Если вы выставляете клиенту цену, то это 1.01 (копейку содрать с клиента), а если клиент пополняет баланс, то это округление в меньшую сторону - на баланс зачисляется 1.00 (снова содрать копейку). Экономика очень подлая хрень. Она экономит всё. Но не за счет себя, а за счет того, кто платит. И вы еще спрашиваете почему "бизнес это благо", потому что те кто им занимаются грабят остальных средь бела дня (если даже в программировании вопрос копейки, то что в маркетинге - я боюсь даже представить, цена из воздуха, хайп и лексусы) и никто еще и доказать этого не может. Везде бумага "сам согласился и подписал".

4) Для работы с баблом также вводят собственную валюту (желательно), т.к. остальные скачут как хотят, а ваша цена на сайте остается прежней, но при этом в самих валютах имеет разное выражение. Помните, да, "Игровое золото"? Это не просто "прикольно". Это юридически и экономически необходимо. Вам. Ведь если компания теряет деньги, то внезапно оказывается, что сам директор кроме бумаг ничего не выдает в мир. А вот из-за вас, программистов, у него из кармана утекает. Замалчивая факт "откуда приходит" очень весело обвинять всех, что "из-за них - уходит".

Как и в экономике. Кто делает - тот платит. Кто не делает - тот выигрывает. В общем - мобилизация не случайность. Медитируйте. Желательно с книгой Ленина.
Ответ написан
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Не использовать float
json_encode(
		[ 'Цена' => intval($_GET['price'] * 100 )/100 ], 
		JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT
);


php code online
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы