werbenhu/php-number-slicing

1.1 2019-08-22 03:39 UTC

This package is auto-updated.

Last update: 2020-08-17 04:12:02 UTC


README

php number slicing! 切割整数成指定份数,类似微信红包金额生成. 可以指定精确度,指定切割数量,以及最小额度。

Installation

You can add this library as a local, per-project dependency to your project using Composer:

composer require werbenhu/php-number-slicing

Usage

use Werben\Tools\NumberSlicing;

function testIntSlicing2IntOne() {
    $precision = 1; //精确度 eg: 1, 0.1, 0.01, 0.01
    $size = 10;         //切割的份数,the size of the number to slicing
    $min = 3;        //最小额度,最小额度必须大于最小精度,min amount eg: 3, 0.23, 0.05, 0.008
    $number = 100;      //要切割的数字,the number
    $items = NumberSlicing::numberSlicing($number, $size, $precision, $min);

    $sum = 0.0;
    $ret_min = $number;
    foreach ($items as $value) {
        $sum += $value;
        if ($ret_min > $value) {
            $ret_min = $value;
        }
    }
    $count = count($items);
    echo "count: $count, sum: $sum, ret_min: $ret_min\n";
    echo "items : ". json_encode($items) ."\n";
}

function testIntSlicing2IntTwo() {
    $precision = 1; //精确度 eg: 1, 0.1, 0.01, 0.01
    $size = 30;         //切割的份数,the size of the number to slicing
    $min = 18666;        //最小额度,最小额度必须大于最小精度,min amount eg: 3, 0.23, 0.05, 0.008
    $number = 800000;      //要切割的数字,the number
    $items = NumberSlicing::numberSlicing($number, $size, $precision, $min);

    $sum = 0.0;
    $ret_min = $number;
    foreach ($items as $value) {
        $sum += $value;
        if ($ret_min > $value) {
            $ret_min = $value;
        }
    }
    $count = count($items);
    echo "count: $count, sum: $sum, ret_min: $ret_min\n";
    echo "items : ". json_encode($items) ."\n";
}

function testIntSlicing2FloatOne() {
    $precision = 0.01; //精确度 eg: 1, 0.1, 0.01, 0.01
    $size = 1000;         //切割的份数,the size of the number to slicing
    $min = 0.05;        //最小额度,最小额度必须大于最小精度,min amount eg: 3, 0.23, 0.05, 0.008
    $number = 100;      //要切割的数字,the number
    $items = NumberSlicing::numberSlicing($number, $size, $precision, $min);

    $sum = 0.0;
    $ret_min = $number;
    foreach ($items as $key => $value) {
        $sum += $value;
        if ($ret_min > $value) {
            $ret_min = $value;
        }
    }
    $count = count($items);
    echo "count: $count, sum: $sum, ret_min: $ret_min\n";
    echo "items: ". json_encode($items) ."\n";
}

function testIntSlicing2FloatTwo() {
    $precision = 0.00001; //精确度 eg: 1, 0.1, 0.01, 0.01
    $size = 1000;         //切割的份数,the size of the number to slicing
    $min = 0.00005;        //最小额度,最小额度必须大于最小精度,min amount eg: 3, 0.23, 0.05, 0.008
    $number = 5;      //要切割的数字,the number
    $items = NumberSlicing::numberSlicing($number, $size, $precision, $min);

    $sum = 0.0;
    $ret_min = $number;
    foreach ($items as $key => $value) {
        $sum += $value;
        if ($ret_min > $value) {
            $ret_min = $value;
        }
    }
    $count = count($items);
    echo "count: $count, sum: $sum, ret_min: $ret_min\n";
    echo "items: ". json_encode($items) ."\n";
}