1

我有一个这样的字符串:

  9.018E-14

现在我想将其转换为普通的十进制数字。

4

3 回答 3

3

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];
}
?>
于 2013-05-07T13:35:30.887 回答
2

如果您的输入是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]);
}

现场演示

于 2013-05-07T13:33:12.000 回答
1

编辑:这是一些 PHP 魔法:

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

来自PHP 文档

如果字符串不包含任何字符 '.'、'e' 或 'E' 并且数值符合整数类型限制(由 PHP_INT_MAX 定义),则字符串将被评估为整数。在所有其他情况下,它将被评估为浮点数。

如果您需要更灵活的格式(例如,从同一个字符串中提取四个数字),请sscanf像这样使用:

$stringval = "12e-3";
$numericval = sscanf($stringval, "%f")[0];
echo $numericval;
于 2013-05-07T13:33:20.877 回答