PHP 浮点数计算问题

<?php
/**
 * 任意两个数的数学计算(+、-、*、/)支持扩展其他运算符 详细请阅读 PHP BC数学函数
 * @param float|int $left_operand  左操作数
 * @param float|int $right_operand 右操作数
 * @param string $operator 运算符
 * @param int $scale 结果保留小数点精度
 * @return float
 */
function float_calculate($left_operand,$right_operand,$operator='+',$scale=2){
    if(!$left_operand || is_numeric($left_operand) || !$right_operand || is_numeric($right_operand)) return false;
	switch($operator){
		case '-':
			$func='bcsub';
			break;
		case '*':
			$func='bcmul';
			break;
		case '/':
			$func='bcdiv';
			break;
		default:
			$func='bcadd';
			break;
	}
	return $func($left_operand,$right_operand,$scale); 
}


/**
 * 多个数字的数学计算(+、-、*、/) 支持扩展其他运算符 详细请阅读 PHP BC数学函数
 * @param array $params  要计算的数字数组按顺序依次用运算符连接计算 例 [10,5,2] => 10-5-2
 * @param string $operator 运算符
 * @param int $scale 结果保留小数点精度
 * @return float
 */
function more_float_calculate($params,$operator='+',$scale=2){
    if(!is_array($params) || count($params)<2) return false;
    foreach($params as $item){
        if(is_numeric($item)) return false;
    }
	switch($operator){
		case '-':
			$func='bcsub';
			break;
		case '*':
			$func='bcmul';
			break;
		case '/':
			$func='bcdiv';
			break;
		default:
			$func='bcadd';
			break;
    }
    $length=count($params);
    $result=$func($params[0],$params[1],$scale);
    if($length>2){
        for($i=2;$i<$length;$i++){
            $result=$func($result,$params[$i],$scale);
        }
    }
	return $result; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值