精度处理 函数 进位/取整方法
<?php
/**
* File Name: test.php
* Author: len
* Mail: i@91coder.org
* Created Time: Wed Sep 18 14:48:47 2019
*/
function priceTool($price, $pricePrecision, $isCarry = false)
{
list($int, $float) = explode('.', $price);
if (!$isCarry) return bcadd($price, 0, $pricePrecision);
$float = rtrim($float, '0');
if (!$float) {
return bcadd($price, 0, $pricePrecision);
}
$len = $pricePrecision - strlen($float);
if ($len < 0) {
$float = '1' . substr($float, 0, $pricePrecision);
$float = substr(strval(++$float), 1, $pricePrecision);
} else {
$float = $float . str_repeat('0', $len);
}
return implode('.', [$int, $float]);
}
echo priceTool('20.123', 2, true), PHP_EOL;
亲测有效 , 方法不是最优 还请见谅