当前位置: 首页 > 工具软件 > PHP MyBlog > 使用案例 >

php取余函数,php 取余数详解

公冶翰池
2023-12-01

$val=9.45;

$result=$val*100;

echo $result%100; //44

?>

提问者奇怪,为什么上面输出的记过是44 而不是想象中的45  ,如果你这样:

echo  945%100  //45

那么结果应该是45的,这是因为php默认对变量进行取整进行取余运算的。

然后看看下面的php代码:

/*

/**

* 这个在官方评论中找到的一个对任意数取余的函数实现(看了下是10年写下的)

* my_bcmod - get modulus (substitute for bcmod)

* string my_bcmod ( string left_operand, int modulus )

* left_operand can be really big, but be carefull with modulus :(

* by Andrius Baranauskas and Laurynas Butkus :) Vilnius, Lithuania

**/

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( $x, 0, $take );

$x = substr( $x, $take );

$mod = $a % $y;

}

while ( strlen($x) );

return (int)$mod;

}

// example

$a = "7044060001970316212900";

$b = 150;

echo my_bcmod($a, $b ).PHP_EOL;

echo bcmod($a, $b).PHP_EOL;

echo $a % $b;

* name: mckee

* blog: http://www.phpddt.com

*/

$val=9.45;

$result=$val*100;

echo intval($result); //这里输出944

echo $result%100; //这里输出44

echo fmod(floatval($result),100); //这里输出45

?>

对于大整数,php会出现溢出,可能返回负数情况(这是因为php默认使用整数取余的,所以你要把它转换成float类型(如上))可以这样做:

 类似资料: