2013-11-21 3 views
0

У меня проблема с большим количеством в PHP. Мое большое количество будет вставлено в базу данных, но все пойдет не так.Большое число в PHP

случай 1:

$testNumber = "1111111111111111"; 
$num = $testNumber*1; 
echo $num;       // --> 1.11111111111E+15 (wrong) 
echo number_format($num,0,"",""); // --> 1111111111111111 (right) 

случай 2:

$testNumber = "11111111111111111"; 
$num = $testNumber*1; 
echo $num;       // --> 1.11111111111E+16 (wrong) 
echo number_format($num,0,"",""); // --> 11111111111111112 (wrong) 

случай 3:

$testNumber = "111111111111111111"; 
$num = $testNumber*1; 
echo $num;       // --> 1.11111111111E+17 (wrong) 
echo number_format($num,0,"",""); // --> 111111111111111104 (wrong) 

Как я могу решить эту проблему?

Заранее благодарен!


Спасибо Wyzard за его предложение. Это мое решение:

$testNumber = "11111111111111111111"; 
$num = bcmul($testNumber,1); 
echo $num;       // --> 11111111111111111111 (right) 

и это очень важная информация:.

«Начиная с PHP 4.0.4, libbcmath в комплекте с PHP не требуется никаких внешних библиотек для этого расширения. "

+0

Откуда берутся слова '$ num'? –

+0

Я обновил свой вопрос. – PhatHV

ответ

4

Эти цифры являются слишком большими, чтобы соответствовать integer, поэтому PHP рассматривает их как floats. Числа с плавающей запятой имеют ограниченную точность; они по существу scientific notation, с ограниченным числом significant figures. Похоже, вы справляетесь с этим прецизионным пределом.

Возможно, вы захотите использовать расширения PHP BCMath или GMP для работы с числами, которые могут быть очень большими.

+0

Спасибо Wyzard. Следуйте своему предложению, я нашел ответ на мой вопрос. Я обновлю свой вопрос выше. – PhatHV

1

Для таких случаев я использовал расширение GMP (http://php.net/manual/en/book.gmp.php). Вы начинаете с отправки номера в виде строки в gmp_init (http://www.php.net/manual/en/function.gmp-init.php), затем работаете с использованием функций gmp _..., а затем извлекаете результат в виде строки, используя gmp_strval (http://www.php.net/manual/en/function.gmp-strval.php)

Смежные вопросы