我有一个这样的字符串:
9.018E-14
现在我想将其转换为正常的十进制数。
答案 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]);
}
答案 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;