在php中将指数数转换为十进制数

时间:2010-12-16 13:53:27

标签: php floating-point decimal

我有一个指数格式的浮点数,即4.1595246940817E-17,我想把它转换成十进制数,如2.99等。

任何帮助将不胜感激。

format_number() sprintf()似乎不适合我。

4 个答案:

答案 0 :(得分:3)

你需要一个更好的数学扩展,如BC Math, GMP...来处理更精确的精确度。

floating number&的限制integer

答案 1 :(得分:1)

使用BC Math库,您可以bcscale()将数字设置为预定的小数,从而为将来需要算术精度的计算设置参数。

bcscale(3);
echo bcdiv('105', '6.55957'); // 16.007

答案 2 :(得分:1)

您可以删除小数点($ x是您的号码):

$strfloat = strtolower((string)($x));
$nodec = str_replace(".", "", $x);

然后提取指数部分。

list($num, $exp) = explode("e", $nodec);
$exp = intval($exp);

然后你有小数和数字,所以你可以格式化它:

if($exp < 0) return "0." . ("0" * -($exp + 1)) . $num;
if($exp == 0) return (string)$x;
if($exp > 0) return $num . ("0" * $exp);

这不会增加精度,只是额外的零。

答案 3 :(得分:0)

这是使用BC Math的解决方案,正如ajreal和Russell Dias所建议的那样:

$au = 65536; 
$auk = bcdiv($au, 1024);
$totalSize = bcdiv(bcmul(49107, $auk), bcpow(1024, 2), 2); 
echo $totalSize . "\n"; 

// echos 2.99