PHP:将数字舍入为 16 个十进制数字


PHP: rounding a number into 16 decimal digits

嗨,我正在尝试将一个数字四舍五入为 16 位十进制

数字,但它只显示并且不会四舍五入到 14 位十进制数字

这是我的尝试:

<?php
$num= 0.16346153846153846;
$round = number_format((float)$num, 17, '.', '');
echo $round * -1;
?>

输出:

-0.16346153846154

预期输出:

0.1634615384615385

我知道浮点数只有 14 个十进制数字。对于 16 位十进制数字还有其他方法吗?

您可以在运行时设置此参数。 通常最多 16 位在大多数平台上的价值,更大的价值只给出无意义或"虚构"数字:

ini_set("precision", "16");

请参阅更改精度级别浮点变量

最近,我们遇到了从 excel 文件中读取金额(十进制数)的问题,该文件的十进制数在小数点后超过 14 位。使用高级算法选项转换十进制数后,此问题已修复。为此,我们需要设置,

ini_set("精度", -1);

参考: http://php.net/precision

你能尝试这样做,看看会发生什么吗? (可能不是处理浮点数和数字的最佳方式)

$num = 0.16346153846153846;
$new_num = $num * -1;
echo number_format((float)$new_num, 17);

先乘法,然后尝试对结果进行舍入。

number_formatprecision INI设置使用float,如果您四舍五入到那么多十进制数字,可能会导致意外行为。

您也可以将 PHP 十进制扩展名与 $decimal->toFixed(16)$decimal->round(16) 一起使用,以保证准确性实现此目的,无论您的 INI 如何。