我有一个用科学计数法表示的浮点数,例如4.1595246940817E-17
,我想将其转换为十进制数,如2.99等。
非常感谢您的帮助。
format_number()
和sprintf()
似乎对我无效。
我有一个用科学计数法表示的浮点数,例如4.1595246940817E-17
,我想将其转换为十进制数,如2.99等。
非常感谢您的帮助。
format_number()
和sprintf()
似乎对我无效。
你需要一个更好的数学扩展库,比如BC Math, GMP...,以处理更精确的精度。
php -r "echo 49107*64/1024/1024;"
,预设 Gb 而不是让它溢出... - ajreal$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);
这并不增加精度,只是多了一些零。
bcscale()
将数字缩放到预定的小数位数,这将为需要算术精度的未来计算设置参数。bcscale(3);
echo bcdiv('105', '6.55957'); // 16.007
$au = 65536;
$auk = bcdiv($au, 1024);
$totalSize = bcdiv(bcmul(49107, $auk), bcpow(1024, 2), 2);
echo $totalSize . "\n";
// echos 2.99