PHP四舍五入到精度2


PHP round to precision 2

我的支付系统从每笔交易中收取0.5%。我的账户上有0.9美元,数额很小。当我试图通过API提取0.9美元时,会出现错误,费用为0.0045美元,四舍五入为0.91美元。所以我只能提取0.89美元并支付0.00445美元的费用,四舍五入到1美分即可清空我的账户;

我不明白附加费是用哪个公式四舍五入的=(

php round(0.9+0.9*0.005,2) 

返回0.9$,如何获得0.91$?

编辑:ceil适用于这个特定的金额,但在实践中,当我只提取1美分时,佣金,即0.00005,不知何故不算作0.01,看起来除了ceil()之外,只包括点后的前两个零。hm.

ceil((0.01*0.005)*100)/100;给出1美分,但实际上api为零。

使用ceil 怎么样

$number = 0.9*0.005;
$number = ceil(100*$number) / 100; // rounds fee up to nearest cent
$number = $number + 0.9;
echo round($number,2);

不要在ceil函数内进行乘法运算!你会得到浮点错误,这可能是非常不可预测的。为了避免这种情况:

function ceiling($value, $precision = 0) {
    $offset = 0.5;
    if ($precision !== 0)
        $offset /= pow(10, $precision);
    return round($value + $offset, $precision, PHP_ROUND_HALF_DOWN);
}

例如,ceiling(2.2200001, 2)将给出2.23