If you don't have bcmath installed and you need to use bcdiv() with a defined precision / scale you may need this function:
if( !function_exists( "bcdiv" ) )
{
function bcdiv( $first, $second, $scale = 0 )
{
$res = $first / $second;
return round( $res, $scale );
}
}
bcdiv
(PHP 4, PHP 5)
bcdiv — Divise deux nombres de grande taille
Description
string bcdiv
( string $left_operand
, string $right_operand
[, int $scale
] )
Divise l'opérande left_operand par l'opérande right_operand .
Liste de paramètres
- left_operand
-
L'opérande de gauche, sous la forme d'une chaîne de caractères.
- right_operand
-
L'opérande de droite, sous la forme d'une chaîne de caractères.
- scale
-
Ce paramètre optionnel est utilisé pour définir le nombre de digits après la décimale à placer dans le résultat. Vous pouvez également définir la précision globale par défaut pour toutes les fonctions en utilisant la fonction bcscale().
Valeurs de retour
Retourne le résultat de la division, sous la forme d'une chaîne de caractères, ou NULL si l'opérande right_operand vaut 0.
Exemples
Exemple #1 Exemple avec bcdiv()
<?php
echo bcdiv('105', '6.55957', 3); // 16.007
?>
bcdiv
no at answer dot com
05-Jul-2008 10:06
05-Jul-2008 10:06
MM
18-Jan-2008 12:29
18-Jan-2008 12:29
Perhaps some one can find useful this function to compute the modular inverse of a integer (extended euclidean algorithm):
function invmod($a,$b) {
$n=$b;
$x=0; $lx=1; $y=1; $ly=0;
while ($b) {
$t=$b;
$q=bcdiv($a,$b,0);
$b=bcmod($a,$b);
$a=$t;
$t=$x; $x=bcsub($lx,bcmod(bcmul($q,$x),$n)); $lx=$t;
$t=$y; $y=bcsub($ly,bcmod(bcmul($q,$y),$n)); $ly=$t;
}
if (bccomp($lx,0) == -1)
$lx=bcadd($lx,$n);
return $lx;
}
// verify
$n="2447995268898324993537772139997802321";
$t="64941057316178801556773346239351236811";
$m="123456789";
$i=invmod($t,$n);
// (t*m)*inv(t) is m
echo bcmod(bcmul(bcmod(bcmul($t,$m),$n),$i),$n) == $m;
Gautam
29-Aug-2007 04:56
29-Aug-2007 04:56
<?php
//converting in to required precision of decimal points
$result= bcdiv(89.99999999997,2.57865741235478,2);
echo "$result"; // 34.90 result with 2 decimal points
?>
cristianDOTzuddas]NOSPAM[gmailDOTcom
24-Jul-2005 02:10
24-Jul-2005 02:10
Decimal to binary conversion, using BC Math.
Note: this function is VERY slow if the decimal number is too big!
<?
function bc_decbin($dec_str) {
if (strlen($dec_str)>0) {
$bin_str = '';
do {
if (((int)$dec_str[strlen($dec_str)-1] % 2) === 0)
$bin_str .= '0';
else
$bin_str .= '1';
$dec_str = bcdiv($dec_str, '2');
} while ($dec_str!='0');
return strrev($bin_str);
}
else
return null;
}
?>
-----
Cristian
www.CodeFlower.com
