PHP Doku:: Addition zweier Zahlen beliebiger Genauigkeit - function.bcadd.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzMathematische ErweiterungenBCMath Arbitrary Precision MathematicsBC Math Funktionenbcadd

Ein Service von Reinhard Neidl - Webprogrammierung.

BC Math Funktionen

<<BC Math Funktionen



(PHP 4, PHP 5)

bcaddAddition zweier Zahlen beliebiger Genauigkeit


string bcadd ( string $left_operand , string $right_operand [, int $scale ] )

Addiert den left_operand (linken Operanden) zum right_operand (rechten Operanden).



Der linke Operand in Stringform.


Der rechte Operand in Stringform.


Dieser optionale Parameter kann benutzt werden, um die Anzahl der Nachkommastellen im Ergebnis festzulegen. Sie können mit Hilfe der bcscale()-Funktion auch einen globalen Vorgabewert für alle Funktionen festlegen.


Die Summe beider Operanden in Stringform.


Beispiel #1 bcadd()-Beispiel


$b '5';

bcadd($a$b);     // 6
echo bcadd($a$b4);  // 6.2340


Siehe auch

  • bcsub() - Subtrahiert zwei Zahlen beliebiger Genauigkeit

2 BenutzerBeiträge:
- Beiträge aktualisieren...
16.07.2009 6:16
I made this to add an unlimited size of numbers together..

This could be useful for those without the BCMath extension.

It allows decimals, and optional $Scale parameter.  If $Scale isn't specified, then it'll automatically adjust to show the correct number of decimals.


function Add($Num1,$Num2,$Scale=null) {
// check if they're valid positive numbers, extract the whole numbers and decimals
preg_match("/^\+?(\d+)(\.\d+)?$/",$Num2,$Tmp2)) return('0');

// this is where the result is stored

// remove ending zeroes from decimals and remove point

// calculate the longest length of decimals

// if $Scale is null, automatically set it to the amount of decimal places for accuracy
if($Scale==null) $Scale=$DLen;

// remove leading zeroes and reverse the whole numbers, then append padded decimals on the end

// calculate the longest length we need to process

// pad the two numbers so they are of equal length (both equal to $MLen)

// process each digit, keep the ones, carry the tens (remainders)
for($i=0;$i<$MLen;$i++) {
$Output[$i])) $Sum+=$Output[$i];
$Sum>9) $Output[$i+1]=1;

// convert the array to string and reverse it

// substring the decimal digits from the result, pad if necessary (if $Scale > amount of actual decimals)
  // next, since actual zero values can cause a problem with the substring values, if so, just simply give '0'
  // next, append the decimal value, if $Scale is defined, and return result


printf("  Add(%s,%s);\r\n// %s\r\n\r\n",$A,$BAdd($A,$B));
printf("BCAdd(%s,%s);\r\n// %s\r\n\r\n",$A,$B,BCAdd($A,$B));

  This will produce the following..
  // 5958613049.33928756347877

  // 5958613049


It was a fun experience making, and thought I'd share it.
Bo Anders Svensson
23.05.2005 14:25
Be aware:

$exp1 = "1E5";
$exp2 = "2E4";

$ans1 = bcadd((float)$exp1, (float)$exp2, 3);
$ans2 = bcadd((int)$exp1, (int)$exp2, 3);
$ans3 = bcadd($exp1, $exp2, 3);

echo "1: $exp1 + $exp2 = $ans1\r\n";
echo "2: $exp1 + $exp2 = $ans2\r\n";
echo "3: $exp1 + $exp2 = $ans3\r\n";

1: 1E5 + 2E4 = 120000.000
2: 1E5 + 2E4 = 3.000
3: 1E5 + 2E4 = 0.000

PHP Powered Diese Seite bei
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)