奇怪的模数运算符结果 - PHP

时间:2017-09-22 02:33:27

标签: php modulus

我正在开发一个PHP应用程序,并且数学运算导致错误的答案显示错误的结果。所以,我开始挖掘,经过几个小时的努力,我能够发现问题。

以下是有问题的表达式:

echo -1 % 26;

答案应该是25,但它会-1。我不知道,我的表情有什么问题吗?

PHP输出: PHP Output

计算器: Calculator Output

任何人都可以确定,问题在哪里?

2 个答案:

答案 0 :(得分:1)

这是预期的行为。 From the PHP manual

  

模运算符%的结果与被除数具有相同的符号 - 也就是说,$a % $b的结果与$a具有相同的符号

如果被除数的符号(%左侧的部分)发生变化,结果也会发生变化。您可以通过添加除数找到负余数的正当量。 -1相当于25模26,因为-1 + 26 = 25。

因此,您可以执行以下操作以获得积极的结果:

function modulo($dividend, $divisor) {
  $result = $dividend % $divisor;
  return $result < 0 ? $result + $divisor : $result;
}

$calculation = modulo(-1, 26); // 25
$calculation2 = modulo(51, 26); // 25

答案 1 :(得分:0)

怎么样?

$ cat test.php
<?php

function truemod($num, $mod) {
  return ($mod + ($num % $mod)) % $mod;
}

echo truemod(-1, 26).PHP_EOL;
?>

输出

$ php test.php 
25