PHP 8.4.2 Released!

bcscale

(PHP 4, PHP 5, PHP 7, PHP 8)

bcscale Устанавливает или получает количество цифр после десятичной точки по умолчанию для функций модуля BCMath

Описание

bcscale(int $scale): int

Функция устанавливает количество знаков после десятичной точки по умолчанию для функций модуля BCMath, при вызове которых разрядность дробной части не указали явно.

bcscale(null $scale = null): int

Функция получает текущую разрядность дробной части.

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

scale

Разрядность дробной части, количество знаков после десятичной точки.

Возвращаемые значения

Функция возвращает старую разрядность дробной части, когда вызывается с целочисленным аргументом для установки нового значения разрядности, иначе возвращает текущее количество знаков после десятичной точки.

Ошибки

Функция выбрасывает ошибку ValueError, если значение аргумента scale выходит за пределы допустимого диапазона.

Список изменений

Версия Описание
8.0.0 Параметр scale теперь принимает значение null.
7.3.0 Функция bcscale() теперь возвращает текущую разрядность дробной части числа; при вызове с аргументом для установки нового значения количества знаков после десятичной точки по умолчанию функция теперь возвращает старое значение разрядности дробной части. Раньше параметр scale был обязательным, а функция bcscale() возвращала только значение true.

Примеры

Пример #1 Пример установки разрядности дробной части числа функцией bcscale()

<?php

// Установка количества знаков после десятичной точки по умолчанию : 3
bcscale(3);
echo
bcdiv('105', '6.55957'); // 16.007

// То же самое без вызова функции bcscale()
echo bcdiv('105', '6.55957', 3); // 16.007

?>

Добавить

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

up
23
mwgamera at gmail dot com
17 years ago
These functions DO NOT round off your values. No arbitrary precision libraries do it this way. It stops calculating after reaching scale of decimal places, which mean that your value is cut off after scale number of digits, not rounded. To do the rounding use something like this:
<?php
function bcround($number, $scale=0) {
$fix = "5";
for (
$i=0;$i<$scale;$i++) $fix="0$fix";
$number = bcadd($number, "0.$fix", $scale+1);
return
bcdiv($number, "1.0", $scale);
}
?>
up
16
sicerwork at aliyun dot com
7 years ago
Executing bcsacle() will change the scale value of fpm.conf, not only the current process.
up
6
ravenswd at gmail dot com
12 years ago
Simple, easy way to remove excess trailing zeros using rtrim:
<php>
// $total is the result of a bcmath calculation
if ( strpos($total, '.') !== false ):
$total = rtrim($total, '0');
$total = rtrim($total, '.');
endif;
</php>
up
5
herslyadam at gmail dot com
10 years ago
edited bcround function with negative number support:
<?php
function bcround($number, $scale=0) {
if(
$scale < 0) $scale = 0;
$sign = '';
if(
bccomp('0', $number, 64) == 1) $sign = '-';
$increment = $sign . '0.' . str_repeat('0', $scale) . '5';
$number = bcadd($number, $increment, $scale+1);
return
bcadd($number, '0', $scale);
}
?>
To Top