BcMath\Number::__construct

(PHP 8 >= 8.4.0)

BcMath\Number::__construct — Crée un objet BcMath\Number

Description

public function BcMath\Number::__construct(string |int $num)

Crée un objet BcMath\Number à partir d'une valeur int ou string .

Liste de paramètres

num

Une valeur int ou string . Si num est un int , la BcMath\Number::scale est toujours définie à 0. Si num est un string , il doit être un nombre valide, et la BcMath\Number::scale est automatiquement définie en analysant la chaîne.

Erreurs / Exceptions

Cette méthode lève une ValueError si num est de type string et n'est pas une chaîne numérique BCMath bien formée.

Exemples

Exemple #1 Exemple de BcMath\Number::__construct()

<?php
$num1 = new BcMath\Number(100);
$num2 = new BcMath\Number('-200');
$num3 = new BcMath\Number('300.00');
var_dump($num1, $num2, $num3);
?>

L'exemple ci-dessus va afficher :

object(BcMath\Number)#1 (2) {
 ["value"]=>
 string(3) "100"
 ["scale"]=>
 int(0)
}
object(BcMath\Number)#2 (2) {
 ["value"]=>
 string(4) "-200"
 ["scale"]=>
 int(0)
}
object(BcMath\Number)#3 (2) {
 ["value"]=>
 string(6) "300.00"
 ["scale"]=>
 int(2)
}

Voir aussi

Found A Problem?

Learn How To Improve This Page • Submit a Pull Request • Report a Bug
+add a note

User Contributed Notes 1 note

up
0
gajowy at agzeta dot pl
1 year ago
It seems that the constructor does not accept values ​​in the scientific format, e.g. "1e20". To get around this limitation, I wrote a function that converts floats represented by a scientific format string to floats represented by a string as a decimal fractional number. You can use the output of this function as the input to the constructor.
<?php
use BCMath\Number;
$num = -123e-40; // can be a float or string variable, because...
$strNum = sci2dec( $num ); // ...there is an internal float to string conversion
$L = new Number( $strNum );
var_dump( $L );
function sci2dec( string $s ): string
{
 if( !preg_match( '/^([+-]?)(\d+(?:\.\d+)?)[eE]([+-]?\d+)$/', $s, $m ) )
 return $s; // it's not sci format, return unchanged
 [ $sign, $mantissa, $exp ] = [ $m[1], $m[2], (int)$m[3] ];
 [ $int, $frac ] = str_contains( $mantissa, '.' ) ? explode( '.', $mantissa, 2 ) : [ $mantissa, '' ];
 $digits = $int . $frac;
 $exp -= strLen( $frac );
 if( $exp >= 0 )
 {
 $digits .= str_repeat('0', $exp);
 $dec = lTrim($digits, '0');
 return $sign . ( $dec === '' ? '0' : $dec );
 }
 $pos = strLen( $digits ) + $exp;
 if( $pos > 0 ) // kropka w środku
 return $sign . subStr( $digits, 0, $pos ) . '.' . subStr( $digits, $pos );
 return $sign . '0.' . str_repeat( '0', -$pos ) . $digits;
}
?>

Output is:
object(BcMath\Number)#2 (2) {
 ["value"]=>
 string(43) "-0.0000000000000000000000000000000000000123"
 ["scale"]=>
 int(40)
}
+add a note

AltStyle によって変換されたページ (->オリジナル) /