Преобразовать экспоненциальное число в десятичное в php - PullRequest
3 голосов
/ 16 декабря 2010

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

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

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

Ответы [ 4 ]

3 голосов
/ 16 декабря 2010

Вам нужно лучшее математическое расширение, например BC Math, GMP ... , чтобы обрабатывать более точную точность.

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

1 голос
/ 16 декабря 2010

Вы можете удалить десятичную точку ($ 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);

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

1 голос
/ 16 декабря 2010

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

bcscale(3);
echo bcdiv('105', '6.55957'); // 16.007
0 голосов
/ 16 декабря 2010

Вот решение, использующее 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
...