PHP:将数字四舍五入为16位小数

时间:2014-12-24 20:43:10

标签: php floating-point decimal-point rounding

您好我正在尝试将数字四舍五入为 16位小数,但它只显示并且不会向上舍入直到 14十进制数

这是我的尝试:

<?php

$num= 0.16346153846153846;

$round = number_format((float)$num, 17, '.', '');

echo $round * -1;
?>

输出:

-0.16346153846154

预期输出:

0.1634615384615385

我知道 float 只有14位小数。 16位小数还有其他方法吗?

4 个答案:

答案 0 :(得分:3)

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

ini_set("precision", "16");

请参阅Changing precision level floating-point variables

答案 1 :(得分:0)

你可以尝试这样做,&amp;走着瞧吧? (虽然可能不是处理花车和数字的最好方法)

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

首先乘以,然后尝试舍入结果。

答案 2 :(得分:0)

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

您可以选择将PHP decimal extension$decimal->toFixed(16)$decimal->round(16)结合使用,以确保准确性,而无论您使用的是哪种INI。

答案 3 :(得分:0)

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

ini_set('precision',-1);

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