一尘不染

不带科学计数法显示浮点值

php

当我在PHP中进行以下乘法时:

$ret = 1.0 * 0.000000001;

我得到结果:1.0E-9

我想将此结果转换为普通的十进制表示法,我该怎么做?

sprintf('%f',$ret)不起作用,它返回0.000000。溢出?


阅读 281

收藏
2020-05-29

共1个答案

一尘不染

sprintf('%f',$ret)不起作用,它返回0.000000。溢出?

sprintf 可以,但是您在这里错过了一点。

0.000000没有溢出。只是sprintf对于%f修饰符,默认情况下使用6位数字。另外,请注意%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');

它将从右边删除零:

0.000000001

希望这会有所帮助。

2020-05-29