![](/img/trans.png)
[英]How to convert exponential number(SimpleXML object string) to decimal in 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.