PHP精确计算+四舍五入

444 阅读1分钟
/**
 * 加
 * @param Float $left_value 加号左边数
 * @param Float $right_value 加号右边数
 * @param Int $decimal_places 保留小数位,默认0
 * @return float|int 返回结果
 */
function round_bcadd($left_value, $right_value, $decimal_places = 0)
{
    $result = round(bcadd($left_value, $right_value, bcadd($decimal_places, 2)), $decimal_places);
    return $decimal_places === 0 ? (int)$result : $result;
}

/**
 * 减
 * @param Float $left_value 减号左边数
 * @param Float $right_value 减号右边数
 * @param Int $decimal_places 保留小数位,默认0
 * @return float|int 返回结果
 */
function round_bcsub($left_value, $right_value, $decimal_places = 0)
{
    $result = round(bcsub($left_value, $right_value, bcadd($decimal_places, 2)), $decimal_places);
    return $decimal_places === 0 ? (int)$result : $result;
}

/**
 * 乘
 * @param Float $left_value 乘号左边数
 * @param Float $right_value 乘号右边数
 * @param Int $decimal_places 保留小数位,默认0
 * @return float|int 返回结果
 */
function round_bcmul($left_value, $right_value, $decimal_places = 0)
{
    $result = round(bcmul($left_value, $right_value, bcadd($decimal_places, 2)), $decimal_places);
    return $decimal_places === 0 ? (int)$result : $result;
}

/**
 * 除
 * @param Float $left_value 分子
 * @param Float $right_value 分母
 * @param Int $decimal_places 保留小数位,默认0
 * @return float|int 返回结果
 */
function round_bcdiv($left_value, $right_value, $decimal_places = 0)
{
    $result = round(bcdiv($left_value, $right_value, bcadd($decimal_places, 2)), $decimal_places);
    return $decimal_places === 0 ? (int)$result : $result;
}