当我在PHP中进行以下乘法时:
$ret = 1.0 * 0.000000001;
我得到结果:1.0E-9
我想将此结果转换为普通的十进制表示法,我该怎么做?
sprintf('%f',$ret)不起作用,它返回0.000000。溢出?
sprintf('%f',$ret)
0.000000
sprintf 可以,但是您在这里错过了一点。
sprintf
0.000000没有溢出。只是sprintf对于%f修饰符,默认情况下使用6位数字。另外,请注意%f区域设置,%F可能更适合。
%f
%F
您可能希望使用更多数字,例如说4000000(400万):
$ php -r "printf('%.4000000F', 1*0.000000001);" Notice: printf(): Requested precision of 4000000 digits was truncated to PHP maximum of 53 digits in Command line code on line 1 Call Stack: 0.0001 319080 1. {main}() Command line code:0 0.0001 319200 2. printf() Command line code:1 0.00000000100000000000000006228159145777985641889706869
如该示例所示,不仅有一个公共值(6位数字),而且还有一个最大值(可能取决于PHP所执行的计算机系统),在本例中,如警告所示,这里被截断为53位数字。
由于您的问题,我想说您要显示:
0.000000001
这是九位数字,因此您需要这样写:
sprintf('%.9F',$ret)
但是,您可能要这样做:
rtrim(sprintf('%.20F', $ret), '0');
它将从右边删除零:
希望这会有所帮助。