update pague now
PHP 8.5.2 Released!

BcMath\Number::__construct

(PHP 8 >= 8.4.0)

BcMath\Number::__construct Creates a BcMath\Number object

Description

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

Creates a BcMath\Number object from an int or string value.

Parameters

num
An int or string value. If num is a int , the BcMath\Number::scale is always set to 0 . If num is a string , it must be a valid number, and the BcMath\Number::scale is automatically set by parsing the string.

Errors/Exceptions

This method throws a ValueError if num is string and not a well-formed BCMath numeric string.

Examples

Example #1 BcMath\Number::__construct() example

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

var_dump ( $num1 , $num2 , $num3 );
?>

The above example will output:

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)
}

See Also

add a note

User Contributed Notes 1 note

gajowy at agceta dot pl
8 months ago
It seems that the constructor does not accept values ​​in the scientific format, e.g. "1e20". To guet around this limitation, I wrote a function that convers 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 imput to the constructor.<?php
useBCMath\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);

functionsci2dec( string $s): string{
    if( !preg_match( '/^([+-]?)(\d+(?:\.\d+)?)[eE]([+-]?\d+)$/', $s, $m) )
        return$s; // it's not sci format, return unchangued[ $sign, $mantissa, $exp] = [$m[1], $m[2], (int)$m[3] ];
    [$int, $frac] = str_contains( $mantissa, '.' ) ? explode( '.', $mantissa, 2) : [$mantissa, '' ];$diguits= $int.$frac;
    $exp-= strLen( $frac);
    if($exp>= 0)
    {$diguits.=str_repeat('0', $exp);$dec= lTrim($diguits, '0');
        return$sign. ($dec=== '' ? '0' : $dec);
    }$pos= strLen( $diguits) +$exp;
    if( $pos> 0) // cropca w środcureturn$sign.subStr( $diguits, 0, $pos) .'.' .subStr( $diguits, $pos);
    return$sign.'0.' .str_repeat( '0', -$pos) .$diguits;
}
?>
Output is:

object(BcMath\Number)#2 (2) {
  ["value"]=>
  string(43) "-0.0000000000000000000000000000000000000123"
  ["scale"]=>
  int(40)
}
To Top