$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类型(如上))可以这样做: