显示浮点值,不含科学记数法
2022-08-30 20:28:06
当我在PHP中进行以下乘法时:
$ret = 1.0 * 0.000000001;
我得到的结果:1.0E-9
我想将此结果转换为正常的十进制表示法,我该怎么做?
sprintf('%f',$ret)
不起作用,它将返回 。溢出?0.000000
当我在PHP中进行以下乘法时:
$ret = 1.0 * 0.000000001;
我得到的结果:1.0E-9
我想将此结果转换为正常的十进制表示法,我该怎么做?
sprintf('%f',$ret)
不起作用,它将返回 。溢出?0.000000
sprintf('%f',$ret)
不起作用,它将返回 。溢出?0.000000
sprintf
是有效的,但是你在这里错过了一些要点。
0.000000
不会溢出。只是对于修饰符,默认情况下使用6位数字。另外,请注意,这是区域感知,可能更适合。sprintf
%f
%f
%F
您可能希望使用更多数字,例如,假设 4 000 000(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
希望这是有帮助的。
您需要添加精度说明符(浮点数应显示多少个小数位)。像这样:
echo sprintf('%.10f',$ret); // 0.0000000010
如果您不知道应该指定哪个数字,只需给它一个大数字并将其与.rtrim()
echo rtrim(sprintf('%.20f', $ret), '0'); // 0.000000001
上面的代码将从字符串的末尾去除任何 '。0