php 将以字符串形式表示的指数转换为小数

mqkwyuun  于 2023-04-04  发布在  PHP
关注(0)|答案(4)|浏览(134)

假设我有一个字符串,其中包含“7.2769482308e+01”(这个数字来自第三方软件,我无法控制格式)。
什么是最便宜的方法将其转换为十进制72.769482308
我能想到的唯一解决方案是拆分小数+指数部分并使用乘法。但可能有一些内置的函数来做同样的事情吗?

注意:各位,是的,我读过Convert exponential to a whole number in PHPConvert exponential number to decimal in php。这些问题是不相关的,因为它们已经有了一个数字,但我有一个字符串

rqqzpn5f

rqqzpn5f1#

那么简单的转换为浮点值呢?

$string = "7.2769482308e+01";
$float  = (float) $string;
laawzig2

laawzig22#

我成功地使用了最初由this question提供的number_format(1.2378147769392E+14, 0, '', '')
当值是字符串时,这也有效,如下所示:number_format("1.2378147769392E+14", 0, '', '') .来吧,给予一试。

rqcrx0a6

rqcrx0a63#

这里有一个很便宜的:$float = "7.2769482308e+01" + 0;

8xiog9wr

8xiog9wr4#

使其相对于E之后的位数的数量动态会好得多。
使用explode获取这些数字精度,并使用sprintf对其进行格式化。

代码段:

<?php

function getFormattedDecimal($str){
    $precision = explode("e", strtolower($str));
    $precision = substr($precision[1], 1); // remove + and - operators
    return sprintf("%.".$precision."f", $str);
}

Online Demo

注意:sprintf可能会根据小数位的样式进行四舍五入。

相关问题