Un wrapper/shim d'extension BC Math orienté objet.
decimal offre une implémentation apatride et fluide, orientée objet, de l'arithmétique de base à précision arbitraire, en utilisant BC Math si disponible.
Vous pouvez en savoir plus sur la précision en virgule flottante ici.
Exemple:
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'
Via Compositeur
$ composer require prestashop/ decimal
Liens rapides :
Crée un nouveau nombre decimal .
public __construct ( string $ number [, int $ exponent = null ] ): decimal Number
Il existe deux manières d'instancier un nombre 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'
Renvoie le résultat calculé de l'ajout d'un autre nombre au nombre actuel.
public decimal Number:: plus ( decimal Number $ addend ): decimal Number
Exemples :
$ a = new PrestaShop decimal decimal Number ( ' 123.456 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> plus ( $ b ); // echoes '777.777'
Renvoie le résultat calculé de la soustraction d'un autre nombre au nombre actuel.
public decimal Number:: minus ( decimal Number $ subtrahend ): decimal Number
Exemples :
$ a = new PrestaShop decimal decimal Number ( ' 777.777 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> minus ( $ b ); // echoes '123.456'
Renvoie le résultat calculé de la multiplication du nombre actuel par un autre.
public decimal Number:: times ( decimal Number $ factor ): decimal Number
Exemples :
$ a = new PrestaShop decimal decimal Number ( ' 777.777 ' );
$ b = new PrestaShop decimal decimal Number ( ' 654.321 ' );
echo $ a -> times ( $ b ); // echoes '508915.824417'
Renvoie le résultat calculé de la division du nombre actuel par un autre, avec jusqu'à un certain nombre de positions decimal (6 par défaut).
public decimal Number:: dividedBy ( decimal Number $ divisor [, int $ precision = Operation Division:: DEFAULT_PRECISION ] )
Exemples :
$ 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'
Renvoie le résultat de l'assertion de comparaison.
$ 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
Renvoie le nombre sous forme de chaîne, éventuellement arrondie, avec un nombre exact de positions decimal .
public decimal Number:: toPrecision ( int $ precision [, string $ roundingMode = Rounding:: ROUND_TRUNCATE ] ): string
Exemples :
$ 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'
L'arrondi se comporte comme toPrecision
, mais fournit "jusqu'à" un certain nombre de positions decimal (il n'ajoute pas de zéros à droite).
public decimal Number:: round ( int $ max decimal s [, string $ roundingMode = Rounding:: ROUND_TRUNCATE ] ): string
Exemples :
$ 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'
Crée une nouvelle copie de ce nombre multiplié par 10^exposant
public decimal Number:: toMagnitude ( int $ exponent ): decimal Number
Exemples :
$ 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
Veuillez consulter CONTRIBUER pour plus de détails.
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.