Когда я печатаю это число в php 137582392964679, я получаю это как вывод 1.37582392965E + 14
Все, что я делаю, – это просто
print 137582392964679;
Кто-нибудь знает, почему он это делает? Это как если бы он автоматически конвертировался в экспоненциальный номер. Кто-то сказал, что это потому, что я на 32-битной машине. Если это так, как я могу обойти эту проблему?
благодаря
Проверьте const PHP_INT_MAX. Вероятно, вы превысили максимальный размер, который обычно составляет около 2 миллиардов для 32-битной системы.
Максимальное число, которое вы можете сохранить в значении целого числа на 32-битной машине, равно 2147483647. Вы можете хранить числа, большие, чем это, в поплавке, но вы рискуете потерять определенную точность.
Если это так, как я могу обойти эту проблему?
Вероятно, вы хотите использовать большую библиотеку. Попробуйте GMP :
$sum = gmp_add("123456789012345", "76543210987655"); echo gmp_strval($sum) . "\n";
Результат:
200000000000000
Другая альтернатива, которую вы можете использовать, – это BC Math .
Если вам не нужно делать какие-либо вычисления с этими числами, но просто сохраните их правильно, сохраните их как строки, а не целые.
Я на 64-битной машине, и она делает то же самое. Вы можете попробовать использовать: print number_format(137582392964679);
Это число слишком велико, чтобы вписаться в 32-битное целое число, так что да, оно автоматически преобразуется в тип с плавающей точкой. Как обойти это зависит от требований вашей системы. Если вы не собираетесь делать арифметику, просто сохраните ее как строку. Если точность не слишком важна, вы можете оставить ее как float и отформатировать ее с помощью printf. Если точность важна, и вы можете обновить ее до 64-битной, чтобы ее исправить, если вы не можете выполнить обновление и вам нужно целое число, вы можете изучить использование расширения PHP Math PHP.
В руководстве четко сказано:
Если PHP встречает число за пределами целочисленного типа, оно будет интерпретироваться как float.
Также ваш номер не может быть представлен точно из-за присущих ограничений с плавающей запятой, следовательно, он приближается.