downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

bcsqrt> <bcpowmod
[edit] Last updated: Fri, 10 Feb 2012

view this page in

bcscale

(PHP 4, PHP 5)

bcscaleSpécifie le nombre de décimales par défaut pour toutes les fonctions

Description

bool bcscale ( int $scale )

Spécifie la précision par défaut pour toutes les fonctions mathématiques sur des nombres de taille arbitraire qui suivent et qui omettent le paramètre scale.

Liste de paramètres

scale

Le facteur de précision.

Valeurs de retour

Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec bcscale()

<?php

// précision par défaut : 3
bcscale(3);
echo 
bcdiv('105''6.55957'); // 16.007

// la même chose sans utiliser bcscale()
echo bcdiv('105''6.55957'3); // 16.007

?>



bcsqrt> <bcpowmod
[edit] Last updated: Fri, 10 Feb 2012
 
add a note add a note User Contributed Notes bcscale
rastislav dot bostik at bwd21 dot cz 25-Jan-2012 02:20
Previously stated one liner trailing 0 removing using rtrim() works fine except following class of subcases:

<?php
echo rtrim('100.0000', '0.'); // 1 instead 100
echo rtrim('1230.00000000', '0.'); // 123 instead 1230
?>

What seems to be working to me is using regular expression replacement. Althought it`s probably not that fast as rtrim(), I hope it should be more reliable:

<?php
function removeFloatNumStringZeroTrailer($input) {
   
$patterns = array('/[\.][0]+$/','/([\.][0-9]*[1-9])([0]*)$/');
   
$replaces = array('','$1');
    return
preg_replace($patterns,$replaces,$input);
}

echo
removeFloatNumStringZeroTrailer('100.0000'); // says 100
echo removeFloatNumStringZeroTrailer('1230.00000000'); // says 1230
?>
dcz at phpbb-seo dot com 25-Mar-2011 07:05
The general approach for a one liner trailing 0 removing would be :
<?php
echo rtrim('1.2500000000', '0.'); // 1.25
echo rtrim('1.00000000', '0.'); // 1
?>

Which seems totally appropriate since we are working with strings, and also is likely to be the fastest way.
Nitrogen 25-Jan-2009 09:00
Good day,
I made a little function to remove the excess zeroes after calculations.. it makes them cleaner and more presentable.

<?php

function DecimalClean($Input) {
 
$Input=explode('.',$Input,2);
  if(!isset(
$Input[1])) $Input[1]=0;
  for(
$i=(strlen($Input[1])-1);$i>0;$i--) {
    if(
$Input[1]{$i}=='0')
     
$Input[1]=substr($Input[1],0,-1);
    else break;
  }
  return(
sprintf('%s%s',$Input[0],($Input[1]!='0')?".{$Input[1]}":''));
}

BCScale(10); // allow 10 decimals
$Sum = BCDiv(10,8); // make a calculation

printf("Result #1: %s\n", $Sum);
// 1.2500000000

printf("Result #2: %s\n", DecimalClean($Sum));
// 1.25

?>

Hope this helps,
Nitrogen.
mwgamera at gmail dot com 05-Dec-2007 06:45
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);
        }
?>
invincible at limitedintelligence dot com 08-Feb-2006 03:50
If you don't set the default scale, be careful when you're chaining together several BC math functions - since by default, these functions will round off your values, losing accuracy very quickly:

<?php
$a
= 1.234
$b
= 2.345
$c
= 7.890

$ab
= bcmul($a,$b);           // 2
$abc = bcmul($ab,$c);

echo
$abc;                 // 15
?>

... compare with the answer you get when you use more decimal places:

<?php
$a
= 1.234
$b
= 2.345
$c
= 7.890

bcscale
(15);
$ab = bcmul($a,$b);           // 2.893730
$abc = bcmul($ab,$c);

echo
$abc;                 // 22.83152970
?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites