(PHP 4, PHP 5, PHP 7, PHP 8)
bcscale — Define o recupera la precisión por defecto para todas las funciones bc math
Define la precisión por defecto para todas las llamadas posteriores a las funciones bc math que omiten el argumento de precisión.
Recupera el factor de precisión actual.
scaleEl factor de precisión.
Retorna la precisión anterior cuando se utiliza como definidor. De lo contrario, se retorna la precisión actual.
Esta función levanta una excepción ValueError si scale
está fuera del rango válido.
| 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 .
|
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
?>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);
}
?>Executing bcsacle() will change the scale value of fpm.conf, not only the current process.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>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);
}
?>