37 public static function _add($left_operand, $right_operand, $scale = 50)
39 if (function_exists(
"bcadd"))
45 $res = $left_operand + $right_operand;
46 if (is_numeric($scale))
$res = round(
$res, $scale);
54 public static function _comp($left_operand, $right_operand, $scale = 50)
56 if (function_exists(
"bccomp"))
62 if (is_numeric($scale))
64 $left_operand = round($left_operand, $scale);
65 $right_operand = round($right_operand, $scale);
67 if ($left_operand == $right_operand)
return 0;
68 if ($left_operand > $right_operand)
return 1;
76 public static function _div($left_operand, $right_operand, $scale = 50)
78 if (function_exists(
"bcdiv"))
84 if ($right_operand == 0)
return NULL;
85 $res = $left_operand / $right_operand;
86 if (is_numeric($scale))
$res = round(
$res, $scale);
94 public static function _mod($left_operand, $modulus)
96 if (function_exists(
"bcmod"))
102 return $left_operand % $right_operand;
109 public static function _mul($left_operand, $right_operand, $scale = 50)
111 if (function_exists(
"bcmul"))
117 $res = $left_operand * $right_operand;
118 if (is_numeric($scale))
$res = round(
$res, $scale);
126 public static function _pow($left_operand, $right_operand, $scale = 50)
128 if (function_exists(
"bcpow"))
134 $res = pow($left_operand, $right_operand);
135 if (is_numeric($scale))
$res = round(
$res, $scale);
143 public static function _sqrt($operand, $scale = 50)
145 if (function_exists(
"bcsqrt"))
151 $res = sqrt($operand);
152 if (is_numeric($scale))
$res = round(
$res, $scale);
160 public static function _sub($left_operand, $right_operand, $scale = 50)
162 if (function_exists(
"bcsub"))
168 $res = $left_operand - $right_operand;
169 if (is_numeric($scale))
$res = round(
$res, $scale);
182 $original = $float_str;
183 $float_str = (string)((
float)($float_str));
184 $float_str = str_replace(
",",
".", $float_str);
187 if(($pos = strpos(strtolower($float_str),
'e')) !==
false)
190 $exp = substr($float_str, $pos+1);
191 $num = substr($float_str, 0, $pos);
194 if((($num_sign = $num[0]) ===
'+') || ($num_sign ===
'-')) $num = substr($num, 1);
196 if($num_sign ===
'+') $num_sign =
'';
199 if((($exp_sign = $exp[0]) ===
'+') || ($exp_sign ===
'-')) $exp = substr($exp, 1);
200 else trigger_error(
"Could not convert exponential notation to decimal notation: invalid float string '$float_str'", E_USER_ERROR);
203 $right_dec_places = (($dec_pos = strpos($num,
'.')) ===
false) ? 0 : strlen(substr($num, $dec_pos+1));
205 $left_dec_places = ($dec_pos ===
false) ? strlen($num) : strlen(substr($num, 0, $dec_pos));
208 if($exp_sign ===
'+') $num_zeros = $exp - $right_dec_places;
209 else $num_zeros = $exp - $left_dec_places;
212 $zeros = str_pad(
'', $num_zeros,
'0');
215 if($dec_pos !==
false) $num = str_replace(
'.',
'', $num);
218 if($exp_sign ===
'+')
return $num_sign.$num.$zeros;
220 else return $num_sign.
'0.'.$zeros.$num;
223 else return $original;