Joh*_*hni 14 php floating-point
当我在PHP中进行以下乘法时:
$ret = 1.0 * 0.000000001;
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:1.0E-9
我想将此结果转换为正常的十进制表示法,我该怎么做?
sprintf('%f',$ret)不起作用,它返回0.000000.溢出?
hak*_*kre 31
sprintf('%f',$ret)不起作用,它返回0.000000.溢出?
sprintf 工作,但你在这里错过了一些观点.
0.000000没有溢出.这只是sprintf对%f修改器使用默认每6个数字.另外请%f注意意识到语言环境,%F可能更适合.
您可能想要使用更多数字,例如让我们说4 000 000(四百万):
$ 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
Run Code Online (Sandbox Code Playgroud)
正如这个例子所示,不仅有一个共同的值(6位),而且还有一个最大值(可能取决于PHP执行的计算机系统),在我的情况下截断到53位,如警告所示.
因为你的问题,我想说你要显示:
0.000000001
Run Code Online (Sandbox Code Playgroud)
这是九位数,所以你需要这样写:
sprintf('%.9F',$ret)
Run Code Online (Sandbox Code Playgroud)
但是,您可能希望这样做:
rtrim(sprintf('%.20F', $ret), '0');
Run Code Online (Sandbox Code Playgroud)
这将从之后删除右边的零:
0.000000001
Run Code Online (Sandbox Code Playgroud)
希望这是有帮助的.
您需要添加精度说明符(浮点数应显示多少个十进制数).像这样的东西:
echo sprintf('%.10f',$ret); // 0.0000000010
Run Code Online (Sandbox Code Playgroud)
如果你不知道你应该指定什么号码,只需给它一个大号并将它与它结合起来rtrim().
echo rtrim(sprintf('%.20f', $ret), '0'); // 0.000000001
Run Code Online (Sandbox Code Playgroud)
上面的代码将从0字符串的末尾删除任何内容.