mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-7.2'
* PHP-7.2: Scale support for bcmod()
This commit is contained in:
commit
24fd49fbab
3 changed files with 21 additions and 8 deletions
|
@ -60,9 +60,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_bcdiv, 0, 0, 2)
|
|||
ZEND_ARG_INFO(0, scale)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_bcmod, 0)
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_bcmod, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, left_operand)
|
||||
ZEND_ARG_INFO(0, right_operand)
|
||||
ZEND_ARG_INFO(0, scale)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_bcpowmod, 0, 0, 3)
|
||||
|
@ -354,26 +355,38 @@ PHP_FUNCTION(bcdiv)
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto string bcmod(string left_operand, string right_operand)
|
||||
/* {{{ proto string bcmod(string left_operand, string right_operand [, int scale])
|
||||
Returns the modulus of the two arbitrary precision operands */
|
||||
PHP_FUNCTION(bcmod)
|
||||
{
|
||||
zend_string *left, *right;
|
||||
zend_long scale_param = 0;
|
||||
bc_num first, second, result;
|
||||
int scale = (int)BCG(bc_precision);
|
||||
|
||||
ZEND_PARSE_PARAMETERS_START(2, 2)
|
||||
ZEND_PARSE_PARAMETERS_START(2, 3)
|
||||
Z_PARAM_STR(left)
|
||||
Z_PARAM_STR(right)
|
||||
Z_PARAM_OPTIONAL
|
||||
Z_PARAM_LONG(scale_param)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
if (ZEND_NUM_ARGS() == 3) {
|
||||
scale = (int) ((int)scale_param < 0 ? 0 : scale_param);
|
||||
}
|
||||
|
||||
bc_init_num(&first);
|
||||
bc_init_num(&second);
|
||||
bc_init_num(&result);
|
||||
php_str2num(&first, ZSTR_VAL(left));
|
||||
php_str2num(&second, ZSTR_VAL(right));
|
||||
|
||||
switch (bc_modulo(first, second, &result, 0)) {
|
||||
switch (bc_modulo(first, second, &result, scale)) {
|
||||
case 0:
|
||||
if (result->n_scale > scale) {
|
||||
result = split_bc_num(result);
|
||||
result->n_scale = scale;
|
||||
}
|
||||
RETVAL_STR(bc_num2str(result));
|
||||
break;
|
||||
case -1:
|
||||
|
|
|
@ -9,7 +9,7 @@ bcmath.scale=0
|
|||
echo bcmod("11", "2"),"\n";
|
||||
echo bcmod("-1", "5"),"\n";
|
||||
echo bcmod("8728932001983192837219398127471", "1928372132132819737213"),"\n";
|
||||
echo bcmod("3.5", "4"),"\n";
|
||||
echo bcmod("3.5", "4", 1),"\n";
|
||||
echo bcmod("1071", "357.5"),"\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
|
@ -17,4 +17,4 @@ echo bcmod("1071", "357.5"),"\n";
|
|||
-1
|
||||
1459434331351930289678
|
||||
3.5
|
||||
356.0
|
||||
356
|
||||
|
|
|
@ -7,7 +7,7 @@ antoni@solucionsinternet.com
|
|||
<?php if(!extension_loaded("bcmath")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
echo bcmod('1', '2', '3');
|
||||
echo bcmod('1', '2', '3', '4');
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: bcmod() expects exactly 2 parameters, 3 given in %s.php on line %d
|
||||
Warning: bcmod() expects at most 3 parameters, 4 given in %s.php on line %d
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue