我是不是期望 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 做一些它不应该做的事情?的主要内容,如果未能解决你的问题,请参考以下文章
我是不是应该期望 C++ 编译器会编译具有“按编码”的数据竞争的多线程代码,或者它可能会做其他事情?