如何在PHP中将指数转换为小数

时间:2013-05-07 13:30:16

标签: php floating-point

我有一个这样的字符串:

  9.018E-14

现在我想将其转换为正常的十进制数。

3 个答案:

答案 0 :(得分: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];
}
?>

答案 1 :(得分: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]);
}

Live demo

答案 2 :(得分:1)

编辑:这是一些PHP魔术:

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

来自PHP docs

  

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

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

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