У меня есть строка вроде этого:
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]); }