文字

bcmod

(PHP 4, PHP 5, PHP 7)

bcmod对一个任意精度数字取模

说明

string bcmod ( string $left_operand , string $modulus )

对左操作数使用系数取模

参数

left_operand

字符串类型的左操作数

modulus

字符串类型系数

返回值

返回字符串类型取模后结果,如果系数为0则返回null

范例

Example #1 bcmod() example

<?php
echo  bcmod ( '4' '2' );  // 0
echo  bcmod ( '2' '4' );  // 2
?>

参见

  • bcdiv() - 2个任意精度的数字除法计算

用户评论:

[#1] drahoszdenek at gmail dot com [2013-02-01 16:44:23]

The modulus can be only integer. For "floats" bcmod returns 0:

<?php
echo bcmod('10''2.1'); // 0
?>


For real modulus you can use BN-PHP project (hosted at Bitbucket):

<?php
$eval 
= new \BN\Expression\ExpressionEvaluator();
$operators = new \BN\Expression\OperatorsFactory();
$eval->setOperators($operators->getOperators(array('%')));
        
echo 
$eval->evaluate('10 % 2.1'); // 1.6
echo $eval->evaluate('10 % -2.1'); // 1.6
echo $eval->evaluate('-10 % 2.1'); // -1.6
echo $eval->evaluate('-10 % -2.1'); // -1.6
?>

[#2] admin at deosnet dot com [2012-12-20 14:59:54]

This function is also equivalent to :

<?php
    
echo 4%2// 0
    
echo 2%4// 2
?>

[#3] sebas at stageprikbord dot nl [2007-03-27 06:53:09]

function bc_is_even($int_str) {
  return (int)!($int_str & 1);
}

More resource efficient version of 'bc_is_even'.

[#4] lauris at night dot lt [2003-12-23 08:04:35]

<?php

function my_bcmod$x$y )
{
    
// how many numbers to take at once? carefull not to exceed (int)
    
$take 5;     
    
$mod '';

    do
    {
        
$a = (int)$mod.substr$x0$take );
        
$x substr$x$take );
        
$mod $a $y;    
    } 
    while ( 
strlen($x) );

    return (int)
$mod;
}

// example
echo my_bcmod"7044060001970316212900"150 );
?>

上一篇: 下一篇: