Преобразование экспоненциального числа в десятичное число в php

Я имею число с плавающей запятой в экспоненциальном формате, то есть 4.1595246940817E-17 и я хочу преобразовать его в десятичное число, например 2.99 и т. Д.

Любая помощь будет оценена.

format_number() sprintf() , похоже, не работает для меня.

    Вам нужно лучшее математическое расширение, такое как BC Math, GMP … для обработки более точной точности.

    Ограничение плавающего числа и целого числа

    Используя библиотеку BC Math, вы можете bcscale() числа до заданного десятичного знака, который устанавливает параметр для будущих вычислений, требующих арифметической точности.

     bcscale(3); echo bcdiv('105', '6.55957'); // 16.007 

    Вы можете удалить десятичную точку ($ x – ваш номер):

     $strfloat = strtolower((string)($x)); $nodec = str_replace(".", "", $x); 

    Затем извлеките экспоненциальную часть.

     list($num, $exp) = explode("e", $nodec); $exp = intval($exp); 

    Затем у вас есть десятичное число и номер, поэтому вы можете отформатировать его:

     if($exp < 0) return "0." . ("0" * -($exp + 1)) . $num; if($exp == 0) return (string)$x; if($exp > 0) return $num . ("0" * $exp); 

    Это не добавляет точности, а просто лишние нули.

    Вот решение, использующее BC Math , как было предложено ajreal и Russell Dias:

     $au = 65536; $auk = bcdiv($au, 1024); $totalSize = bcdiv(bcmul(49107, $auk), bcpow(1024, 2), 2); echo $totalSize . "\n"; // echos 2.99