您好我正在尝试将数字四舍五入为 16位小数,但它只显示并且不会向上舍入直到 14十进制数。
这是我的尝试:
<?php
$num= 0.16346153846153846;
$round = number_format((float)$num, 17, '.', '');
echo $round * -1;
?>
输出:
-0.16346153846154
预期输出:
0.1634615384615385
我知道 float 只有14位小数。 16位小数还有其他方法吗?
答案 0 :(得分:3)
您可以在运行时设置此参数。 16位通常是最大值 在大多数平台上的价值,更大的价值只给予无意义或“虚构” 位:
ini_set("precision", "16");
答案 1 :(得分:0)
你可以尝试这样做,&amp;走着瞧吧? (虽然可能不是处理花车和数字的最好方法)
$num = 0.16346153846153846;
$new_num = $num * -1;
echo number_format((float)$new_num, 17);
首先乘以,然后尝试舍入结果。
答案 2 :(得分:0)
number_format
和precision
的INI设置使用float
,如果四舍五入到十进制数字,很可能导致意外的行为。
您可以选择将PHP decimal extension与$decimal->toFixed(16)
或$decimal->round(16)
结合使用,以确保准确性,而无论您使用的是哪种INI。
答案 3 :(得分:0)
最近,我们遇到了从excel文件中读取金额(十进制数)的问题,该文件的十进制数在小数点后超过14位。使用高级算法选项转换十进制数后,此问题已解决。为此,我们需要设置
ini_set('precision',-1);