PHP 응용 프로그램에서 작업 중이며 수학 연산이 잘못된 결과를 표시하는 잘못된 대답이되었습니다. 그래서 나는 파고 들어가기 시작했고 몇 시간 동안 노력하여 문제를 발견 할 수있었습니다.이상한 모듈 연산자 결과 - PHP
여기에 문제가 식입니다
echo -1 % 26;
대답은해야 25
하지만 -1
을 제공합니다. 나도 몰라, 내 표정에 문제가있어?
사람이 식별시겠습니까, 문제는?
PHP 응용 프로그램에서 작업 중이며 수학 연산이 잘못된 결과를 표시하는 잘못된 대답이되었습니다. 그래서 나는 파고 들어가기 시작했고 몇 시간 동안 노력하여 문제를 발견 할 수있었습니다.이상한 모듈 연산자 결과 - PHP
여기에 문제가 식입니다
echo -1 % 26;
대답은해야 25
하지만 -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
어떻게?
$ cat test.php
<?php
function truemod($num, $mod) {
return ($mod + ($num % $mod)) % $mod;
}
echo truemod(-1, 26).PHP_EOL;
?>
는 출력
$ php test.php
25
이 작동하지만 다른 계산에 문제가 발생합니다. 하지만 어쨌든, 고마워! – Alena
이 기호에 대해하지 않습니다이 결과는 다른 – Alena
또한이 경우 : – iblamefish
감사가 왜 표시하도록 업데이트 답변 @Alena하지만이 경우 나는 생각하지 않는다 그것을 처리하는 적절한 방법. 여분의 수표를 추가 할 필요가 있기 때문에 숫자가 음수이면 모듈러스 계산 대신 추가하십시오. – Alena