繁体   English   中英

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

[英]Convert exponential number to decimal in php

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

任何帮助将不胜感激。

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

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

浮点数整数的限制

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

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

你可以删除小数点($ 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);

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

这是使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM