bcscale

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

bcscaleDefine o recupera la precisión por defecto para todas las funciones bc math

Descripción

bcscale(int $scale): int

Define la precisión por defecto para todas las llamadas posteriores a las funciones bc math que omiten el argumento de precisión.

bcscale(null $scale = null): int

Recupera el factor de precisión actual.

Parámetros

scale

El factor de precisión.

Valores devueltos

Retorna la precisión anterior cuando se utiliza como definidor. De lo contrario, se retorna la precisión actual.

Errores/Excepciones

Esta función levanta una excepción ValueError si scale está fuera del rango válido.

Historial de cambios

Versión Descripción
8.0.0 scale ahora es nullable.
7.3.0 bcscale() ahora puede ser utilizada para recuperar la precisión actual; cuando se utiliza para definir una nueva precisión, ahora retorna la precisión anterior. Anteriormente, scale era obligatorio, y bcscale() siempre retornaba true.

Ejemplos

Ejemplo #1 Ejemplo con bcscale()

<?php

// precisión por defecto: 3
bcscale(3);
echo
bcdiv('105', '6.55957'); // 16.007

// lo mismo sin utilizar bcscale()
echo bcdiv('105', '6.55957', 3); // 16.007

?>

add a note

User Contributed Notes 4 notes

up
25
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
17
sicerwork at aliyun dot com
8 years ago
Executing bcsacle() will change the scale value of fpm.conf, not only the current process.
up
5
ravenswd at gmail dot com
13 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
11 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