phpexpertsinc / money-type
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: 2023-07-23 17:23:04 UTC
README
MoneyType是PHP Experts, Inc.的项目,旨在精确跟踪货币,甚至高达数百万美元。
将货币存储为浮点数或整数乘以一百永远是不安全的。本项目为您提供所需的安全保障,以确保类似"Office Space"中的bug不会发生在您的企业应用程序中。
安装
通过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
✔ 不会尝试非数字的操作
✔ 可以获得两位小数的完整精度值
✔ 不能计算小数余数
✔ 如果请求计算整数余数,将抛出异常
✔ 如果开发人员传递“我是一个虚拟参数”,则可以计算整数余数
✔ 只能通过数字字符串实例化
✔ 可以作为字符串访问对象以获取其估值
✔ 可以以分精度进行加法
✔ 可以以分精度进行减法
✔ 可以以分精度进行乘法
✔ 可以以分精度进行除法
✔ 可以以分精度比较两个数字
✔ 任何操作都不会接受非数字
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
CEO: PHP Experts, Inc.
[Alix Axel]
谁贡献了我们的 "bcround()" 函数的基本版本,来源于 https://stackoverflow.com/a/1653826/430062。
授权
MIT 授权。请参阅授权文件以获取更多信息。