如何在没有 number_format() 的情况下为 php 中的“echo”设置更多 12 位数字的浮点精度?

How set float precision for 'echo' in php more 12 digits without number_format()?

提问人:Евгений Решетников 提问时间:3/1/2023 更新时间:3/1/2023 访问量:77

问:

PHP代码:

$val1 = 32;
$val2 = 0.00012207031255;
$res = $val1 - $val2;
echo "echo: ".$res."\n";
echo "json: ".json_encode($res)."\n";
echo "form: ".number_format($res, 14);

输出:

echo: 31.999877929687
json: 31.99987792968745
form: 31.99987792968745

如何在没有 echo 的情况下显示 14 位小数number_format()

我尝试设置,但没有任何改变precision=14php.ini

PHP 精度

评论

2赞 brombeer 3/1/2023
"但没有任何改变“您确实在进行更改后重新启动了服务器,对吗?

答:

1赞 NIKUNJ PATEL 3/1/2023 #1

如果要在不更改每行代码的情况下为整个项目添加全局解决方案,则可以在引导文件中设置或在php.ini中设置相同的值。ini_set('precision', 14)

要格式化单个值,您可以使用具有 14 个十进制字符格式的函数。sprintf()

法典:

$val1 = 32;
$val2 = 0.00012207031255;
$res = $val1 - $val2;
echo sprintf("echo: %.14f\n", $res);
echo "json: ".json_encode($res)."\n";
echo "form: ".number_format($res, 14);

结果:

echo: 31.99987792968745
json: 31.99987792968745
form: 31.99987792968745

评论

0赞 Евгений Решетников 3/1/2023
是的。这是一个很好的解决方案,但我使用的是大项目,其中有很多外国代码中的“回声”。而且我无法编辑它
0赞 NIKUNJ PATEL 3/1/2023
更新用于添加全局解决方案的代码。
0赞 Евгений Решетников 3/1/2023
太好了,正是我需要的
0赞 Dmitry Leiko 3/1/2023 #2

您可以尝试使用数学 php 模块函数:

php > $a = 32;

php > $b = 0.00012207031255;

php > echo bcsub($a, $b, 14);
31.99987792968745

更多细节在这里

1赞 Theo27 3/1/2023 #3

你可以使用 sprintf()

$val1 = 32;
$val2 = 0.00012207031255;
$res = $val1 - $val2;
echo "echo: ".rtrim(sprintf("%.14f", $res), "0")."\n";