Объектно-ориентированная оболочка/оболочка расширения BC Math.
decimal предлагает плавную объектно-ориентированную реализацию базовой арифметики произвольной точности без сохранения состояния с использованием BC Math, если она доступна.
Подробнее о точности чисел с плавающей запятой можно узнать здесь.
Пример:
use PrestaShop decimal decimal Number ;
use PrestaShop decimal Operation Rounding ;
echo ( new decimal Number ( ' 0.1 ' ))
-> plus ( new decimal Number ( ' 0.7 ' ))
-> times ( new decimal Number ( ' 10 ' ))
-> round ( 0 , Rounding:: ROUND_FLOOR )
// echoes '8'
Через композитор
$ composer require prestashop/ decimal
Быстрые ссылки:
Создает новое decimal число.
public __construct ( string $ number [, int $ exponent = null ] ): decimal Number
Существует два способа создания экземпляра decimal decimal числа:
// create a number from string
$ number = new PrestaShop decimal decimal Number ( ' 123.456 ' );
echo $ number ; // echoes '123.456'
// exponent notation
$ number = new PrestaShop decimal decimal Number ( ' 123456 ' , - 3 );
echo $ number ; // echoes '123.456'
Возвращает вычисленный результат добавления еще одного числа к текущему.
public decimal Number:: plus ( decimal Number $ addend ): decimal Number
Примеры:
$ a = new PrestaShop decimal decimal Number ( ' 123.456 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> plus ( $ b ); // echoes '777.777'
Возвращает вычисленный результат вычитания другого числа из текущего.
public decimal Number:: minus ( decimal Number $ subtrahend ): decimal Number
Примеры:
$ a = new PrestaShop decimal decimal Number ( ' 777.777 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> minus ( $ b ); // echoes '123.456'
Возвращает вычисленный результат умножения текущего числа на другое.
public decimal Number:: times ( decimal Number $ factor ): decimal Number
Примеры:
$ a = new PrestaShop decimal decimal Number ( ' 777.777 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> times ( $ b ); // echoes '508915.824417'
Возвращает вычисленный результат деления текущего числа на другое, вплоть до определенного количества decimal знаков (по умолчанию 6).
public decimal Number:: dividedBy ( decimal Number $ divisor [, int $ precision = Operation Division:: DEFAULT_PRECISION ] )
Примеры:
$ a = new PrestaShop decimal decimal Number ( ' 777.777 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> dividedBy ( $ b , 0 ); // echoes '1'
echo $ a -> dividedBy ( $ b , 5 ); // echoes '1.18867'
echo $ a -> dividedBy ( $ b , 10 ); // echoes '1.1886780341'
echo $ a -> dividedBy ( $ b , 15 ); // echoes '1.188678034175886'
Возвращает результат утверждения сравнения.
$ a = new PrestaShop decimal decimal Number ( ' 777.777 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
$ a -> equals ( $ b ); // returns false
$ a -> isLowerThan ( $ b ); // returns false
$ a -> isLowerOrEqualThan ( $ b ); // returns false
$ a -> isGreaterThan ( $ b ); // returns true
$ a -> isGreaterOrEqualThan ( $ b ); // returns true
// shortcut methods
$ a -> equalsZero (); // returns false
$ a -> isLowerThanZero (); // returns false
$ a -> isLowerOrEqualThanZero (); // returns false
$ a -> isGreaterThanZero (); // returns true
$ a -> isGreaterOrEqualThanZero (); // returns true
Возвращает число в виде строки, при необходимости округленной, с точным количеством decimal знаков.
public decimal Number:: toPrecision ( int $ precision [, string $ roundingMode = Rounding:: ROUND_TRUNCATE ] ): string
Примеры:
$ a = new PrestaShop decimal decimal Number ( ' 123.456 ' );
$ a = new PrestaShop decimal decimal Number ( ' -123.456 ' );
// truncate / pad
$ a -> toPrecision ( 0 ); // '123'
$ a -> toPrecision ( 1 ); // '123.4'
$ a -> toPrecision ( 2 ); // '123.45'
$ a -> toPrecision ( 3 ); // '123.456'
$ a -> toPrecision ( 4 ); // '123.4560'
$ b -> toPrecision ( 0 ); // '-123'
$ b -> toPrecision ( 1 ); // '-123.4'
$ b -> toPrecision ( 2 ); // '-123.45'
$ b -> toPrecision ( 3 ); // '-123.456'
$ b -> toPrecision ( 4 ); // '-123.4560'
// ceil (round up)
$ a -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_CEIL ); // '124'
$ a -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_CEIL ); // '123.5'
$ a -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_CEIL ); // '123.46'
$ b -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_CEIL ); // '-122'
$ b -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_CEIL ); // '-123.3'
$ b -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_CEIL ); // '-123.44'
// floor (round down)
$ a -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_FLOOR ); // '123'
$ a -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_FLOOR ); // '123.4'
$ a -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_FLOOR ); // '123.45'
$ b -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_FLOOR ); // '-124'
$ b -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_FLOOR ); // '-123.5'
$ b -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_FLOOR ); // '-123.46'
// half-up (symmetric half-up)
$ a -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_HALF_UP ); // '123'
$ a -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_HALF_UP ); // '123.5'
$ a -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_HALF_UP ); // '123.46'
$ b -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_HALF_UP ); // '-123'
$ b -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_HALF_UP ); // '-123.5'
$ b -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_HALF_UP ); // '-123.46'
// half-down (symmetric half-down)
$ a -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_HALF_DOWN ); // '123'
$ a -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_HALF_DOWN ); // '123.4'
$ a -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_HALF_DOWN ); // '123.46'
$ a -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_HALF_DOWN ); // '-123'
$ a -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_HALF_DOWN ); // '-123.4'
$ a -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_HALF_DOWN ); // '-123.46'
// half-even
$ a -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '123'
$ a -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '123.4'
$ a -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '123.46'
$ a -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '-123'
$ a -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '-123.4'
$ a -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '-123.46'
$ a = new PrestaShop decimal decimal Number ( ' 1.1525354556575859505 ' );
$ a -> toPrecision ( 0 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1'
$ a -> toPrecision ( 1 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.2'
$ a -> toPrecision ( 2 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.15'
$ a -> toPrecision ( 3 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.152'
$ a -> toPrecision ( 4 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.1525'
$ a -> toPrecision ( 5 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.15255'
$ a -> toPrecision ( 6 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.152535'
$ a -> toPrecision ( 7 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.1525354'
$ a -> toPrecision ( 8 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.15253546'
$ a -> toPrecision ( 9 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.152535456'
$ a -> toPrecision ( 10 , PrestaShop decimal Operation Rounding:: ROUND_HALF_EVEN ); // '1.1525354556'
Округление ведет себя как toPrecision
, но обеспечивает «до» определенного количества decimal позиций (оно не добавляет конечные нули).
public decimal Number:: round ( int $ max decimal s [, string $ roundingMode = Rounding:: ROUND_TRUNCATE ] ): string
Примеры:
$ a = new PrestaShop decimal decimal Number ( ' 123.456 ' );
$ a = new PrestaShop decimal decimal Number ( ' -123.456 ' );
// truncate / pad
$ a -> round ( 0 ); // '123'
$ a -> round ( 1 ); // '123.4'
$ a -> round ( 2 ); // '123.45'
$ a -> round ( 3 ); // '123.456'
$ a -> round ( 4 ); // '123.456'
$ b -> round ( 0 ); // '-123'
$ b -> round ( 1 ); // '-123.4'
$ b -> round ( 2 ); // '-123.45'
$ b -> round ( 3 ); // '-123.456'
$ b -> round ( 4 ); // '-123.456'
Создает новую копию этого числа, умноженного на 10^экспонента.
public decimal Number:: toMagnitude ( int $ exponent ): decimal Number
Примеры:
$ a = new PrestaShop decimal decimal Number ( ' 123.456789 ' );
// shift 3 digits to the left
$ a -> toMagnitude (- 3 ); // 0.123456789
// shift 3 digits to the right
$ a -> toMagnitude ( 3 ); // 123456.789
$ number = new PrestaShop decimal decimal Number ( ' 123.45 ' );
$ number -> getIntegerPart (); // '123'
$ number -> getFractionalPart (); // '45'
$ number -> getPrecision (); // '2' (number of decimal s)
$ number -> getSign (); // '' ('-' if the number was negative)
$ number -> getExponent (); // '2' (always positive)
$ number -> getCoefficient (); // '123456'
$ number -> isPositive (); // true
$ number -> isNegative (); // false
$ number -> invert (); // new decimal decimal Number('-123.45')
$ composer install
$ vendor/bin/phpunit
Пожалуйста, смотрите ВКЛАД для получения подробной информации.
Лицензия MIT (MIT). Дополнительную информацию см. в файле лицензии.