1.1. 数字按照某值做切割

/**
     * 数字按照某值做切割
     * @param $number
     * @param $maxNumber
     * @param int $d
     * @return array
     * @throws \Exception
     */
    public function SpiltNumberByMaxNumber($number, $maxNumber, $d = 2)
    {
        if($number==0 || $maxNumber==0){
            throw new \Exception("数字不能为0");
        }
        $maxNumber = abs($maxNumber);
        $flag = false;
        if($number<0){
            $number = abs($number);
            $flag = true;
        }
        $numbers = [];
        $res     = bccomp($number, $maxNumber, $d);
        if ($res < 0) {
            throw new \Exception("总数不能小于最大切割数");
        }
        if ($res > 0) {
            while($number > 0){
                if($number >= $maxNumber){
                    $number = (double)bcsub($number,$maxNumber,$d);
                    if($number >= 0){
                        $numbers[] =  $maxNumber;
                    }
                }else{
                    $numbers[] =  $number;
                    $number = 0;
                }
            }
        }
        else {
            $numbers[] = $number;
        }
        if($flag){
            $numbers = array_map(function($v)use($d){
                return (double)bcsub(0,$v,$d);
            },$numbers);
        }
        return $numbers;
    }

1.1.1. test

// SpiltNumberByMaxNumber(1.2,0.5,2);
// array:3 [
//   0 => "0.50"
//   1 => "0.50"
//   2 => "0.20"
// ]
-----
// SpiltNumberByMaxNumber(-1.2,-0.5,2);
// array:3 [
//   0 => -0.5
//   1 => -0.5
//   2 => -0.2
// ]

results matching ""

    No results matching ""