Um wrapper/shim de extensão BC Math orientado a objetos.
decimal oferece uma implementação orientada a objetos fluente e sem estado de aritmética básica de precisão arbitrária, usando BC Math, se disponível.
Você pode descobrir mais sobre precisão de ponto flutuante aqui.
Exemplo:
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'
Através do Compositor
$ composer require prestashop/ decimal
Links rápidos:
Cria um novo número decimal .
public __construct ( string $ number [, int $ exponent = null ] ): decimal Number
Existem duas maneiras de instanciar um número 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'
Retorna o resultado calculado da adição de outro número ao atual.
public decimal Number:: plus ( decimal Number $ addend ): decimal Number
Exemplos:
$ a = new PrestaShop decimal decimal Number ( ' 123.456 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> plus ( $ b ); // echoes '777.777'
Retorna o resultado calculado da subtração de outro número ao atual.
public decimal Number:: minus ( decimal Number $ subtrahend ): decimal Number
Exemplos:
$ a = new PrestaShop decimal decimal Number ( ' 777.777 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> minus ( $ b ); // echoes '123.456'
Retorna o resultado calculado da multiplicação do número atual por outro.
public decimal Number:: times ( decimal Number $ factor ): decimal Number
Exemplos:
$ a = new PrestaShop decimal decimal Number ( ' 777.777 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> times ( $ b ); // echoes '508915.824417'
Retorna o resultado calculado da divisão do número atual por outro, com até um certo número de casas decimal (6 por padrão).
public decimal Number:: dividedBy ( decimal Number $ divisor [, int $ precision = Operation Division:: DEFAULT_PRECISION ] )
Exemplos:
$ 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'
Retorna o resultado da afirmação de comparação.
$ 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
Retorna o número como uma string, opcionalmente arredondada, com um número exato de casas decimal .
public decimal Number:: toPrecision ( int $ precision [, string $ roundingMode = Rounding:: ROUND_TRUNCATE ] ): string
Exemplos:
$ 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'
O arredondamento se comporta como toPrecision
, mas fornece "até" um certo número de casas decimal (não adiciona zeros à direita).
public decimal Number:: round ( int $ max decimal s [, string $ roundingMode = Rounding:: ROUND_TRUNCATE ] ): string
Exemplos:
$ 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'
Cria uma nova cópia deste número multiplicado por 10 ^ expoente
public decimal Number:: toMagnitude ( int $ exponent ): decimal Number
Exemplos:
$ 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
Consulte CONTRIBUINDO para obter detalhes.
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.