2017-09-22 2 views
-1

PHP 응용 프로그램에서 작업 중이며 수학 연산이 잘못된 결과를 표시하는 잘못된 대답이되었습니다. 그래서 나는 파고 들어가기 시작했고 몇 시간 동안 노력하여 문제를 발견 할 수있었습니다.이상한 모듈 연산자 결과 - PHP

여기에 문제가 식입니다

echo -1 % 26; 

대답은해야 25하지만 -1을 제공합니다. 나도 몰라, 내 표정에 문제가있어?

PHP 출력 : PHP Output

계산기 : Calculator Output

사람이 식별시겠습니까, 문제는?

답변

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 
+0

이 기호에 대해하지 않습니다이 결과는 다른 – Alena

+0

또한이 경우 : – iblamefish

+0

감사가 왜 표시하도록 업데이트 답변 @Alena하지만이 경우 나는 생각하지 않는다 그것을 처리하는 적절한 방법. 여분의 수표를 추가 할 필요가 있기 때문에 숫자가 음수이면 모듈러스 계산 대신 추가하십시오. – Alena

0

어떻게?

$ cat test.php 
<?php 

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

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

는 출력

$ php test.php 
25 
+0

이 작동하지만 다른 계산에 문제가 발생합니다. 하지만 어쨌든, 고마워! – Alena