Objective wrapper over BCMath
Install via composer
composer require kdabrow/mathFirst declare mutable number. Second string is validated and mutated to correct format. Here are examples with converted number in the comment:
useKdabrow\Math\Number;
newNumber("100"); // 100newNumber("-100"); // -100newNumber("100,11"); // 100.11newNumber("100.11"); // 100.11newNumber("10,000.11"); // 10000.11newNumber("10 000.11"); // 10000.11newNumber("10'000.11"); // 10000.11newNumber(".11"); // 0.11newNumber(",11"); // 0.11newNumber("0,11"); // 0.11newNumber("0.11"); // 0.11Then 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(newNumber('100'));
// array of strings $number->add(['100', '100']);
// array of Number objects$number->add([newNumber('100'), newNumber('100')]);
// object implementing ArrayAccess interface$number->add(newCollection()); // many formats or same elements at the same time$number->add('100', newNumber('200'), ['100', newNumber('200')]); useKdabrow\Math\Number;
$number = newNumber('700');
$number->add('100'); // 800useKdabrow\Math\Number;
$number = newNumber('700');
$number->subtract('100'); // 600useKdabrow\Math\Number;
$number = newNumber('700');
$number->multiply('2'); // 1400useKdabrow\Math\Number;
$number = newNumber('700');
$number->divide('2'); // 350useKdabrow\Math\Number;
$number = newNumber('16');
$number->sqrt(); // 4useKdabrow\Math\Number;
$number = newNumber('2');
$number->pow('3'); // 8useKdabrow\Math\Number;
$number = newNumber('2');
$number->isEqual('3'); // false$number->isEqual('2'); // true$number->isEqual('1'); // falseuseKdabrow\Math\Number;
$number = newNumber('2');
$number->isEqualOrBigger('3'); // false$number->isEqualOrBigger('2'); // true$number->isEqualOrBigger('1'); // trueuseKdabrow\Math\Number;
$number = newNumber('2');
$number->isEqualOrLower('3'); // true$number->isEqualOrLower('2'); // true$number->isEqualOrLower('1'); // falseuseKdabrow\Math\Number;
$number = newNumber('2');
$number->isLower('3'); // true$number->isLower('2'); // true$number->isLower('1'); // falseuseKdabrow\Math\Number;
$number = newNumber('2');
$number->isBigger('3'); // false$number->isBigger('2'); // true$number->isBigger('1'); // trueTo run unit tests go into project folder and type in the console
vendor/bin/phpunitPackage contains docker container capable of running tests
docker compose run php vendor/bin/phpunit