//функция создающая gmp число указанной точности
function float_to_int_gmp($float_num, $decimal_count)
{
list($int_part, $decimal_part) = explode('.',$float_num);
$int_part = $int_part . str_repeat("0", $decimal_count);
$decimal_part = str_pad(substr($decimal_part,0, $decimal_count), $decimal_count, '0', STR_PAD_RIGHT);
$int_gmp = gmp_add(gmp_init($int_part), gmp_init($decimal_part));
echo $int_part.' . '.$decimal_part;
echo "\n";
echo gmp_strval($int_gmp);
echo "\n";
return $int_gmp;
}
//функция, превращающая gmp число в строку с float числом
function int_gmp_to_float_string($int_gmp, $decimal_count)
{
return substr_replace(gmp_strval($int_gmp),'.',(-1*$decimal_count),(-1*$decimal_count-1));
}
//инициализация переменных, заметьте, что обе переменные - строки, тоесть когда будете извлекать из мемкеша или откуда-то еще используйте приведение типов
$a='1234567890';
$b='9876543210.87654321111';
$offset= 8;//количество знаков после запятой
$result = gmp_add(float_to_int_gmp($a, $offset), float_to_int_gmp($b, $offset));
echo "\n";
echo int_gmp_to_float_string($result, $offset);
echo "\n";
11111111100.87654321