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($res, 62, "<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

19808980890.4337338373
198988.43
198988.43373
-198985.56626
285294.39509
0.00000
1
54086994167966954972865232922145915479189167583854556244103944
50062286177465607788773389665555522296686210703323230781078335
88067874482155056238941920533895329772321791417912258762605169
270362741809289887744

100056141.19996
0
-1
-1
Resultat av listning 1.10.4.1

 

   Börja härNummerStora tal