PHP Conference Fukuoka 2025

BcMath\Number::__construct

(PHP 8 >= 8.4.0)

BcMath\Number::__constructСоздаёт новый объект BcMath\Number

Описание

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

Метод создаёт объект класса BcMath\Number из значения с типом int или string.

Список параметров

num
Параметр принимает значение, которое принадлежит типу int или string. При передаче в параметр num аргумента с типом int метод устанавливает для свойства BcMath\Number::scale значение 0. В аргументе с типом string параметр num принимает только допустимые числа, при этом значение для свойства BcMath\Number::scale метод устанавливает автоматически путём разбора строки.

Ошибки

Метод выбрасывает ошибку ValueError, если в аргументе num передали значение с типом string, которое сформировали неправильно с точки зрения допустимого формата числовых строк в модуле BCMath.

Примеры

Пример #1 Пример создания объекта числа методом 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);

?>

Результат выполнения приведённого примера:

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

Смотрите также

Добавить

Примечания пользователей 1 note

up
0
gajowy at agzeta dot pl
4 months 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.<?phpuse 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)}
To Top