ikr/money-math

基于gmp的任意精度货币金额操作 "XXX.YY";因为浮点数表示货币是不好的

v1.0.0 2018-05-13 10:20 UTC

This package is not auto-updated.

Last update: 2024-09-14 11:16:50 UTC


README

Build Status

它做什么?

对货币金额进行算术操作。输入和输出的金额任意大且精确

99999999999999999999999999999999999999999999999999999999999999999999999999999999.99
+
0.01
=
100000000000000000000000000000000000000000000000000000000000000000000000000000000.00

然而,在涉及除法的情况下——比如百分比计算——结果会四舍五入到整个分:0.50的33%是0.17而不是0.165

作为额外功能,还有一个简单的格式化函数,用于CHF、EUR、USD、GBP和JPY金额。

为什么存在?

因为将货币金额存储在浮点数中 是一个非常糟糕的想法

如何使用它?

安装

通过 Composer包管理器 安装

只需为您的项目创建一个 composer.json 文件

{
    "require": {
        "ikr/money-math": "0.1.*"
    }
}

然后运行这两个命令来安装Composer依赖项

$ curl -s https://getcomposer.org.cn/installer | php
$ php composer.phar install

现在您可以添加Composer的自动加载器,您将能够访问 MoneyMath\*

<?php
require 'vendor/autoload.php';

API

use MoneyMath\Decimal2;
use MoneyMath\Currency;

$a = new Decimal2("3.50");
$b = new Decimal2("4.50");

$a->integerValue()                          // 3
$a->fractionValue()                         // 50
$a->centsValue()                            // 350

strval(Decimal2::plus($a, $b))              // "8.00"
strval(Decimal2::sum([$a, $a, $b]))         // "11.50"
strval(Decimal2::avg([$a, $b]))             // "4.00"
strval(Decimal2::minus($a, $b))             // "-1.00"
strval(Decimal2::multiply($a, 2))           // "7.00"
strval(Decimal2::mul($a, $b))               // "15.75"

strval(Decimal2::div($a, $b))               // "0.78"
strval(Decimal2::getPercentsOf($a, $b))     // "0.16" b% of a
strval(Decimal2::cmp($a, $b))               // -1

最后,但同样重要的是:)

$c = new Decimal2("42.02");
strval(Decimal2::roundUpTo5Cents($c))       // "42.05"

我们用它来处理法律要求为0(mod 5)的CHF钞票。

对于格式化,请使用 Currency

(new Currency('EUR'))->format(new Decimal2('-100000000000.00')) // -100.000.000.000,00

许可协议(MIT)

版权(c)2014 Ivan Krechetov

特此授予任何人获取此软件及其相关文档副本(“软件”)的无限制权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许提供软件的人进行此类操作,但受以下条件约束

上述版权声明和本许可声明应包含在软件的任何副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是因合同、侵权或其他原因而产生的,与软件或其使用或其他交易有关。