我有一个指数格式的浮点数,即4.1595246940817E-17
,我想把它转换成十进制数,如2.99等。
任何帮助将不胜感激。
format_number()
sprintf()
似乎不适合我。
答案 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