romainnorberg / residue
将浮点数分成几个部分,并分配任何余数
v0.4
2023-08-25 03:12 UTC
Requires
- php: ^8.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
- spatie/phpunit-watcher: ^1.22
This package is auto-updated.
Last update: 2024-09-25 05:33:10 UTC
README
将浮点数分成几个部分,并分配任何余数。
简介
此无依赖项包提供了一个 split 方法,帮助您将浮点数分成部分,并可能分配任何余数。
还可以指定分割金额的舍入,例如,舍入到0.05。
安装
您可以通过composer安装此包
composer req romainnorberg/residue
要求
此包需要 >= PHP 7.4
Residue VS Brick\Money
此包不涉及货币的概念,并且更基础,在基本操作上比brick/money包快40倍
使用/示例
基本分割
Residue::create(100)->divideBy(3)->split(); // -> \Generator[33.34, 33.33, 33.33] // or Residue::create(100)->divideBy(3)->toArray(); // -> [33.34, 33.33, 33.33]
带有舍入(和余数)的分割
Residue::create(100) ->divideBy(3) ->step(0.05) ->split(); // -> \Generator[33.35, 33.35, 33.30]
带余数
$r = Residue::create(7.315) ->divideBy(3) ->step(0.05); $r->split(); // -> \Generator[2.45, 2.45, 2.40] $r->getRemainder(); // -> 0.015
分割模式
SPLIT_MODE_ALLOCATE 是默认模式,并尝试根据步长分配最大值。
$r = Residue::create(100) ->divideBy(3) ->decimal(0); $r->split(); // -> \Generator[34, 33, 33] $r->getRemainder(); // 0 // $r = Residue::create(101) ->divideBy(3) ->decimal(0); $r->split(); // -> \Generator[34, 34, 33] $r->getRemainder(); // 0
SPLIT_MODE_EQUITY 模式尝试根据步长平均分配最大值。
$r = Residue::create(100) ->divideBy(3) ->decimal(0); $r->split(Residue::SPLIT_MODE_EQUITY); // -> \Generator[33, 33, 33] $r->getRemainder(); // 1 // $r = Residue::create(101) ->divideBy(3) ->decimal(0); $r->split(Residue::SPLIT_MODE_EQUITY); // -> \Generator[33, 33, 33] $r->getRemainder(); // 2
生成器
此包使用 生成器 以减少内存使用。
使用 foreach 语句(使用生成器)
$r = Residue::create(100)->divideBy(3); foreach ($r->split() as $part) { var_dump($part); } float(33.34) float(33.33) float(33.33)
转换为数组
$r = Residue::create(100)->divideBy(3); var_dump($r->toArray()); array(3) { [0]=> float(33.34) [1]=> float(33.33) [2]=> float(33.33) }
测试
composer test
贡献
请参阅CONTRIBUTING 以获取详细信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件romainnorberg@gmail.com 而不是使用问题跟踪器。
致谢
- Romain Norberg
- 所有贡献者
- 插图来自Refactoring.Guru https://refactoring.guru/
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。
