테스트 사이트 - 개발 중인 베타 버전입니다

php 연산 0으로 나누었을때... 채택완료

마지막기회 4년 전 조회 2,392

아래와 같이 각각의 변수값이 0일 경우에  0을 0으로 나누게 되어 사칙연산 에러로 결과값 NAN 이 찍힙니다.

이경우 결과값으로 NAN 대신 0이 찍히게 하려면 어떻게 하려 할까요?

 

$st=0;
$av=0;
echo $av/$st;

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
4년 전

</p>

<p><?php

$st = 0;

$av = 0;

echo (is_nan($st/$av) ? 0 : $st/$av); 

?></p>

<p>

 

이렇게 해보세요~

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

마지막기회
4년 전
is_nan 함수가 있었네요..감사합니다.. 잘 처리되었습니다
s
sinbi
4년 전
처리하시려면 이렇게 처리하셔야 합니다.

<?php
$st = 0;
$av = 0;
echo ($st === 0 || $av ===0) ? 0 : $st/$av;
?>

댓글을 작성하려면 로그인이 필요합니다.

4년 전

0 / 0 이 과연 0일까요?

모든 수가 답입니다.

수학에서 이런걸 부정이라고 하죠.

 

수학이든 컴이든 0으로 나누면 절대 안됩니다.

위 신비님 답변 처럼 분기해서 처리하는 것이 났습니다.

 

그리고 PHP8 이상에서는 0으로 나누면 치명적에러 ( Fatal Error )가 발생합니다.

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

마지막기회
4년 전
수학상 오류나는거는 질문전에 이미 알고 있었구요, 변수다 보니 각각의 변수에 모두 0이 들어갈 경우의 결과를 페이지상 보여줘야 하고자 질문을 올렸습니다.
답변 감사드립니다.

댓글을 작성하려면 로그인이 필요합니다.

s
sinbi Expert
4년 전

https://ko.wikipedia.org/wiki/%EB%B6%84%EC%88%98_(%EC%88%98%ED%95%99)

수학 개념 상 해당 식 자체가 성립이 안 될 듯 ....

if 조건으로 분자 부모 모두 0 이면 걍 0이다란 식으로 처리하셔야 할 듯 합니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

플라이
4년 전

제대로 int값으로 변환이 안되서 그런듯 한데요
$st=0;
$av=0;
echo round($av/$st);

 

0을 그냥 빈값으로 인식되어 그런듯 한데 숫자로 인식되도록 하시면 될듯 합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

마지막기회
4년 전
답변감사합니다.
사칙연산에 0으로 나누었을때 오류가 나는것이 정상이기 때문에 알려주신대로 해도 마찬가지로 NAN으로 결과값이 나오네요 ㅠ
플라이
4년 전
아니면 number_format으로 해보세요
마지막기회
4년 전
질문전에 floor, number_format 함수를 이용해보았지만 모두 마찬가지 입니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인