嗨,我正在尝试将一个数字四舍五入为 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_format
和precision
INI设置使用float
,如果您四舍五入到那么多十进制数字,可能会导致意外行为。
您也可以将 PHP 十进制扩展名与 $decimal->toFixed(16)
或 $decimal->round(16)
一起使用,以保证准确性实现此目的,无论您的 INI 如何。