Как преобразовать экспоненты в десятичные числа в PHP

У меня есть строка вроде этого:

9.018E-14 

Теперь я хочу преобразовать его в нормальные десятичные числа.

EDIT: Вот некоторые магии PHP:

 $stringval = "12e-3"; $numericval = 0 + $stringval; 

Из документов PHP :

Если строка не содержит символов «.», «E» или «E», а числовое значение вписывается в ограничения типа целочисленного типа (как определено PHP_INT_MAX), строка будет оцениваться как целое число. Во всех остальных случаях он будет оцениваться как плавающий.

Если вам нужен более гибкий формат (например, извлечение четырех чисел из одной строки), используйте sscanf следующим образом:

 $stringval = "12e-3"; $numericval = sscanf($stringval, "%f")[0]; echo $numericval; 

В MyGeekPal есть хорошая статья.

Код:

 <?php $total_time = 2.8848648071289E-5; echo exp2dec($total_time); function exp2dec($number) { preg_match('/(.*)E-(.*)/', str_replace(".", "", $number), $matches); $num = "0."; while ($matches[2] > 0) { $num .= "0"; $matches[2]--; } return $num . $matches[1]; } ?> 

Если ваш ввод является float

Если у вас $number = 0.00023459 то печать этого значения в PHP, вероятно, приведет к этому экспоненциальному формату. Это не означает, что переменная хранится таким образом; это просто выходной артефакт.

Используйте printf чтобы обойти это и получить контроль над своим числовым результатом.


Если ваш ввод является string

Почему сложность?

 $matches = Array(); if (preg_match('/(.*)E-(.*)/', $number, $matches)) { $number = $matches[1] * pow(10, -1*$matches[2]); } 

Хотя вы можете немного подтянуть регулярное выражение:

 $matches = Array(); if (preg_match('/(\d+(?:\.\d+)?)E(-?\d+)/i', $number, $matches)) { $number = (float)$matches[1] * pow(10, (int)$matches[2]); } 

Демо-версия