några sidor på nätet om PHP programmering

Sök efter  
Börja här Uppgifter Testa dig själv Tips Sidokarta mm. Länkar Sök

Avrundning Formatering Slumptal Stora tal

1.10.4 Stora tal

Oftast fungerar det bra med vanliga integers och doubles, men ibland kan det bli problem. Hur räknar man t.ex. 100100000? Till verkligt stora tal måste man ta till s.k. Binary Coded Decimals (BCD). I Windows är BCD installerat i standardinstallationen av PHP, men i t.ex. Linux kanske man måste kompilera PHP med -enable-bcmath

Med hjälp av phpinfo() kan man se om BCD är aktiverat eller ej.

BCD Math exempel

Alla BCD funktioner i PHP

<?php

        
# alla bc funktioner har en sista valbar parameter som anger
        # antalet decimaler

        # om man inte vill ange antal decimaler hela tiden
        # kan man sätta defaulten till ett tal och sedan lämna
        # bort antalet decimaler

        # Nedanstående rad sätter decimalernas antal till 5
        
bcscale(5);



        
# bcadd - addition
        #----------------------------------------------
        # tal1, tal2, antal decimaler
        # addera och visa 10 decimaler
        
echo bcadd("1.433733837338""19808980889"10). "<br>";

        
# samma sak fast med 2 decimaler
        
echo bcadd("1.433733837338""198987"2). "<br>";


        
# anger man inte antal decimaler används det tal som
        # sattes med bcscale funktionen
        
echo bcadd("1.433733837338""198987"). "<br>";

        
# bcsub - subtraktion
        #----------------------------------------------
        
echo bcsub("1.433733837338""198987"). "<br>";

        
# bcmul - multiplikation
        #----------------------------------------------
        
echo bcmul("1.433733837338""198987"). "<br>";

        
# bcdiv - division
        #----------------------------------------------
        
echo bcdiv("1.433733837338""198987"). "<br>";

        
# bcmod - modulus
        #----------------------------------------------
        
echo bcmod("1991280391823091""2"). "<br>";

        
# bcpow - power (upphöjt med)
        #----------------------------------------------
        
$res bcpow("22""154"). "<br>";

        
#blir så stor tal att jag måste splitta upp det i flera rader
        
echo chunk_split($res62"<br>");

        
# bcsqrt - kvardarroten
        #----------------------------------------------
        
echo bcsqrt("10011231391827391"). "<br>";

        
# bccomp - jämförelse
        #----------------------------------------------
        # följande ger 0 (true) efterom siffrorna är lika
        # i de 4 första decimalerna
        
echo bccomp("8.2123123123""8.2123123188"4). "<br>";

        
# följande ger -1 (false) efterom siffrorna är lika
        # i de 4 första decimalerna
        
echo bccomp("8.1123123123""8.2123123188"4). "<br>";

        
# ett till exempel - använder default antal decimaler
        
echo bccomp("8.1123123123""8.2123123188"). "<br>";
?>
Listning 1.10.4.1 - samples/s76.php