我有一个这样的字符串:
9.018E-14
现在我想将其转换为普通的十进制数字。
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]);
}
编辑:这是一些 PHP 魔法:
$stringval = "12e-3";
$numericval = 0 + $stringval;
来自PHP 文档:
如果字符串不包含任何字符 '.'、'e' 或 'E' 并且数值符合整数类型限制(由 PHP_INT_MAX 定义),则字符串将被评估为整数。在所有其他情况下,它将被评估为浮点数。
如果您需要更灵活的格式(例如,从同一个字符串中提取四个数字),请sscanf
像这样使用:
$stringval = "12e-3";
$numericval = sscanf($stringval, "%f")[0];
echo $numericval;