我是不是期望 number_format 做一些它不应该做的事情?

Posted

技术标签:

【中文标题】我是不是期望 number_format 做一些它不应该做的事情?【英文标题】:Am I expecting number_format to do something it is not meant to do?我是否期望 number_format 做一些它不应该做的事情? 【发布时间】:2015-10-18 19:46:01 【问题描述】:

我有一个浮点数:9.174599999999995

当我运行 number_format(9.174599999999995, 2) 时,我得到 9.17。我相信我应该得到 9.18,因为 4 轮到 5,然后 7 轮到 8。这不是吗?如何才能达到 9.18 的预期效果?

【问题讨论】:

9.174599999999995 舍入到 9.17,而不是 9.18。 不,不是。任何小于 5 的数字都会向下舍入为 0,这就是为什么你得到 17 而不是 18。 这不是四舍五入的工作方式,在数学上与 php 无关 ***.com/questions/3833137/… 【参考方案1】:

这是因为 number_format 没有四舍五入: http://php.net/manual/en/function.number-format.php

看看round函数: http://php.net/manual/fr/function.round.php

【讨论】:

【参考方案2】:

好吧,你猜错了,正确答案是 9.17,因为舍入是根据舍入点后的一位数字进行的。 基本上当你用 2 位小数四舍五入 9.174599999999995 时,你会根据小于 5 的 4 来四舍五入,所以这个数字会四舍五入到 9.17

【讨论】:

【参考方案3】:

由于大小写你可以使用 php 回合。 例子:

$n=3.18925

$round=round($round, 1);

会显示3.2

$round=round($round, 2);

将显示 3.19

【讨论】:

【参考方案4】:

你的号码,

$number = 9.17499999999995 ;
echo $english_format_number = number_format($number, 2, '.', '');
9.17

$number = 9.17599999999995 ;
echo $english_format_number = number_format($number, 2, '.', '');
9.18

并且通过使用 number_format 2 次,您可以获得期望的结果

$number = 9.17499999999995 ;
echo $number = number_format($number, 3, '.', '');
echo "<br>";
echo $english_format_number = number_format($number, 2, '.', '');  

RESULTS    
    9.175
    9.18

【讨论】:

以上是关于我是不是期望 number_format 做一些它不应该做的事情?的主要内容,如果未能解决你的问题,请参考以下文章

php number_format() 的问题

十进制的number_format问题[关闭]

我是不是应该期望 C++ 编译器会编译具有“按编码”的数据竞争的多线程代码,或者它可能会做其他事情?

PHP number_format 返回不正确的数字

尝试显示带两位小数的数字时 number_format 和 sprintf 的意外结果

number_format 和负数的问题