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; 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章