Введение

Для вычислений с произвольной точностью PHP предоставляет BCMath, который поддерживает числа любого размера и точности, вплоть до 2147483647 (или 0x7FFFFFFF) десятичных знаков, если хватит памяти, представленных в виде строк.

Допустимые (также известные как правильно сформированные) числа BCMath - это строки, соответствующие регулярному выражению /^[+-]?[0]*[1-9]*[.]?[0-9]*$/.

Предостережение

Передача в функции BCMath аргументов типа float, в то время как они ожидают строки могут привести к неожиданным результатам, из-за используемого PHP алгоритма преобразования float в string, например можно получить строку содержащую число в экспоненциальной нотации (который не поддерживается BCMath), или, в зависимости от локали, десятичный разделитель в виде запятой (тогда как BCMath работает только с десятичной точкой).

<?php
$num1 
0// (string) 0 => '0'
$num2 = -0.000005// (string) -0.000005 => '-5.05E-6'
echo bcadd($num1$num26); // => '0.000000'

setlocale(LC_NUMERIC'de_DE'); // десятичная запятая вместо точки
$num2 1.2// (string) 1.2 => '1,2'
echo bcsub($num1$num21); // => '0.0'
?>