Objective wrapper over BCMath
Install via composer
composer require kdabrow/math
First declare mutable number. Second string is validated and mutated to correct format. Here are examples with converted number in the comment:
use Kdabrow\Math\Number;
new Number("100"); // 100
new Number("-100"); // -100
new Number("100,11"); // 100.11
new Number("100.11"); // 100.11
new Number("10,000.11"); // 10000.11
new Number("10 000.11"); // 10000.11
new Number("10'000.11"); // 10000.11
new Number(".11"); // 0.11
new Number(",11"); // 0.11
new Number("0,11"); // 0.11
new Number("0.11"); // 0.11
Then use API provided by Number class. All methods (with the 'sqrt' exception) accept arguments in a given formats:
// numeric string
$number->add('100');
// Number object
$number->add(new Number('100'));
// array of strings
$number->add(['100', '100']);
// array of Number objects
$number->add([new Number('100'), new Number('100')]);
// object implementing ArrayAccess interface
$number->add(new Collection());
// many formats or same elements at the same time
$number->add('100', new Number('200'), ['100', new Number('200')]);
use Kdabrow\Math\Number;
$number = new Number('700');
$number->add('100'); // 800
use Kdabrow\Math\Number;
$number = new Number('700');
$number->subtract('100'); // 600
use Kdabrow\Math\Number;
$number = new Number('700');
$number->multiply('2'); // 1400
use Kdabrow\Math\Number;
$number = new Number('700');
$number->divide('2'); // 350
use Kdabrow\Math\Number;
$number = new Number('16');
$number->sqrt(); // 4
use Kdabrow\Math\Number;
$number = new Number('2');
$number->pow('3'); // 8
use Kdabrow\Math\Number;
$number = new Number('2');
$number->isEqual('3'); // false
$number->isEqual('2'); // true
$number->isEqual('1'); // false
use Kdabrow\Math\Number;
$number = new Number('2');
$number->isEqualOrBigger('3'); // false
$number->isEqualOrBigger('2'); // true
$number->isEqualOrBigger('1'); // true
use Kdabrow\Math\Number;
$number = new Number('2');
$number->isEqualOrLower('3'); // true
$number->isEqualOrLower('2'); // true
$number->isEqualOrLower('1'); // false
use Kdabrow\Math\Number;
$number = new Number('2');
$number->isLower('3'); // true
$number->isLower('2'); // true
$number->isLower('1'); // false
use Kdabrow\Math\Number;
$number = new Number('2');
$number->isBigger('3'); // false
$number->isBigger('2'); // true
$number->isBigger('1'); // true
To run unit tests go into project folder and type in the console
vendor/bin/phpunit
Package contains docker container capable of running tests
docker compose run php vendor/bin/phpunit