PHP ceil函数在特定系列中不能正常工作


php ceil function rounding up not working properly for particular series

这是我的函数

function trimprice($currency, $x=5, $sf=2) {
    $scale = pow(10,$sf);
    return number_format(round(ceil($currency*$scale / $x), $sf) * $x / $scale, $sf);
}

如果输入

这是我期望的实际结果

  1. 2.5 => 2.50
  2. 1.62 => 1.65

但是如果我的版本是1.1,它显示的是1.15而不是1.10;如果是2.2,它显示的是2.25而不是2.20

为什么在ceil函数中会发生这种情况?

这是因为浮点值本身是不准确的。试着

var_export(1.1);

看看它打印了什么。搜索"浮点精度"应该给出你知道很多关于它的信息。

希望你能接受这一点,但如果你不能,那就用理性来代替。