Проблема в том, что вы не используете целые числа, а плавающие точки.
И с большими поплавками, они будут показаны научным способом (с E).
So 11111111111111111111
становится 1.1111111111111E+19
(в математике это тот же номер).
Если вы конвертируете его в строку (cast, of strval()
), она будет второй здесь.
И поскольку у вас будет 1.1111111111111E+19
в виде строки, вы получите вывод, который вы нам дадите.
Решение этой проблемы? У вас их мало, но они не так хороши.
Лучший способ, которым я могу думать, это использование функции number_format:
$value = number_format($value, 0, '', '');
Вместо если функция strval()
.
Большая проблема здесь в том, что плавающие точки недостаточно для этого. Вы столкнетесь с проблемами округления. См. Дополнительную информацию here.
На моем компьютере строка будет 11111111111111110656
, потому что она округляется до 1111111111111111.0656
.
Если вы знаете длину целого числа (в данном случае 16), для этого вы можете использовать substr()
, но опять же: это будет только обходным путем.
Есть ли причина, по которой вы используете 'strval()' вместо того, чтобы просто помещать число между кавычками? – Blaatpraat
Да, я использую strval, потому что в производственном коде строка приходит из другого метода и не всегда имеет тип string. Иногда его тип INT или double. –