phpexperts / money
一个用于精确处理货币数据类型的PHP库。避免浮点数舍入错误。
Requires
- php: ^7.2||8.*
Requires (Dev)
- ext-bcmath: *
- phpexperts/dockerize: *
- phpstan/phpstan: *
- phpunit/phpunit: 8.*|9.*|10.*
- symfony/var-dumper: *
This package is auto-updated.
Last update: 2024-08-23 19:39:34 UTC
README
MoneyType是PHP Experts, Inc.的项目,旨在精确追踪货币,甚至高达数百万美元。
将货币存储为浮点数或整数乘以一百绝对不安全。本项目为您提供所需的安全保障,以确保类似"Office Space"中的错误不会发生在您的企业应用程序中。
安装
通过Composer
composer require phpexperts/money
用法
use PHPExperts\MoneyType\Money; $money = new Money(5.22); $money->add(0.55); echo "$money\n"; // 5.77 # It keeps precision much much better than mere cents. $money->subtract(0.0001); echo "$money\n"; // 5.77 $money->subtract(0.004); echo "$money\n"; // 5.77 $money->subtract(0.001); echo "$money\n"; // 5.76 # Actually, to the tenth decimal place. # So it's Cryptocurrency-ready! $money->multiply(55.7773); echo "$money\n"; // 321.55 # But deep down, it stores the true values to many decimals (if you use BCMath). echo $money->getWithFullPrecision() . "\n"; // 321.5508738395 $money->divide('1.000005'); echo "$money\n"; // 321.55 echo $money->getWithFullPrecision() . "\n"; // 321.5492660931 # You can also compare really large numbers with one another, up to 10 decimal places. # PHP Experts' MoneyType is cryptocurrency ready! In fact, that's what it was designed for! $money->compare(321.5492660931); // 0 = equal $money->compare(321.549266093009); // -1 = less $money->compare(321.5492660931000001); // 1 = more # Get the object. print_r($money); # It is cryptocurrency ready: # Converts Bitcoins to Satoshis $btc = '1.55527331'; $satoshis = NumberHelper::convertToCents($btc, 8); // 155527331 (int)
用例
PHPExperts\MoneyType\Money
✔ 只能使用数字字符串实例化
✔ 将报告正在使用的策略
✔ 如果可用,将使用BCMath
✔ 如果需要,将回退到原生PHP
✔ 将所有操作代理到其计算策略
✔ 确认readme示例可以正常工作
PHPExperts\MoneyType\Internal\BCMathCalcStrategy
✔ 可以获得超过十六位的完整精度值
✔ 可以进行高精度加法
✔ 可以进行高精度减法
✔ 可以进行高精度乘法
✔ 可以进行高精度除法
✔ 可以进行高精度比较
✔ 可以计算高精度模数
✔ 可以计算小数的模数
✔ 可以进行高精度四舍五入
✔ 只能使用数字字符串实例化
✔ 可以通过字符串访问对象以获取其估值
✔ 可以进行分精度加法
✔ 可以进行分精度减法
✔ 可以进行分精度乘法
✔ 可以进行分精度除法
✔ 可以进行分精度比较
✔ 任何操作都不会接受非数字
PHPExperts\MoneyType\Internal\NativeCalcStrategy
✔ 不会尝试使用非数字进行操作
✔ 可以获得两位小数的完整精度值
✔ 无法计算小数的模数
✔ 如果要求计算整数模数,将抛出异常
✔ 如果开发人员传递"i am a dummy parameter",则可以计算整数的模数
✔ 只能使用数字字符串实例化
✔ 可以通过字符串访问对象以获取其估值
✔ 可以进行分精度加法
✔ 可以进行分精度减法
✔ 可以进行分精度乘法
✔ 可以进行分精度除法
✔ 可以进行分精度比较
✔ 任何操作都不会接受非数字
PHPExperts\MoneyType\Internal\NumberHelper:一组用于数字操作的函数。
✔ 如果给定浮点数则返回true
✔ 如果给定浮点数字符串则返回true
✔ 如果给定整数则返回false
✔ 如果给定整数字符串则返回false
✔ 如果给定其他任何东西则抛出异常
✔ 可以在不损失精度的前提下将美元转换为分整数
✔ 可以将比特币转换为satoshis
测试
phpunit
贡献者
Theodore R. Smith theodore@phpexperts.pro
GPG指纹:4BF8 2613 1C34 87AC D28F 2AD8 EB24 A91D D612 5690
首席执行官:PHP Experts, Inc.
[Alix Axel]
他为我们的"bcround()"函数贡献了基础版本,该函数来自https://stackoverflow.com/a/1653826/430062。
许可证
MIT许可证。有关更多信息,请参阅许可证文件。