小学数学老师告诉我们,求余数:同号相除等于正数,异号相除等于负数。但是php中取模和这个有点不一样,主要区别在于取模的结果符号是由被除数符号决定的。来人,把demo给朕抬上来~
科普
本人学渣,为了避免概念混淆,特意梳理下概念:
被除数 ➗ 除数 = 商 ... 余数
测试
<?php
// **** 为了避免%和/混淆,下面顺便对比一下求商的过程,可得求商结果的符号和php运算中是一致的.
echo '求商...'.PHP_EOL;
echo '求商 = 被除数(正数) / 除数(负数):'.PHP_EOL;
$a1 = intval(10/-3);
echo $a1.PHP_EOL;
echo '求商 = 被除数(负数) / 除数(正数):'.PHP_EOL;
$a11 = intval(-10/3);
echo $a11.PHP_EOL;
echo '求商 = 被除数(负数) / 除数(正数)[使用高精度方法]:'.PHP_EOL;
$a111 = bcdiv('-10', '3');
echo $a111.PHP_EOL;
echo PHP_EOL.PHP_EOL;
// **** 下面是求模和数学中求余的主要区别,求模的余数符号是由被除数的符号决定的,即使是高精度计算也一样 ****
echo '求模...'.PHP_EOL;
// 求模 = 被除数 % -除数
echo '求模 = 被除数(正数) % 除数(负数):'.PHP_EOL;
$a2 = 10%-3;
echo $a2.PHP_EOL;
echo '求模 = 被除数(负数) % 除数(正数):'.PHP_EOL;
$a22 = -10%3;
echo $a22.PHP_EOL;
echo '求模 = 被除数(负数) % 除数(正数)[使用高精度方法]:'.PHP_EOL;
$a222 = bcmod('-10', '3');
echo $a222.PHP_EOL;
结果
求商...
求商 = 被除数(正数) / 除数(负数):
-3
求商 = 被除数(负数) / 除数(正数):
-3
求商 = 被除数(负数) / 除数(正数)[使用高精度方法]:
-3
求模...
求模 = 被除数(正数) % 除数(负数):
1
求模 = 被除数(负数) % 除数(正数):
-1
求模 = 被除数(负数) % 除数(正数)[使用高精度方法]:
-1