developer tip

PHP는 두 개의 다른 문자열을 동일하게 표현합니다.

optionbox 2020. 8. 15. 09:05
반응형

PHP는 두 개의 다른 문자열을 동일하게 표현합니다.


중복 가능성 :
php == vs === 연산자
같음 (== 이중 같음) 및 동일성 (=== 삼중 같음) 비교 연산자는 어떻게 다릅니 까?

다음 문이 반환되는 이유는 무엇 true입니까?

"608E-4234" == "272E-3063"

나는 또한 문자열 주위에 작은 따옴표로 이것을 시도했습니다. 평가할 수있는 유일한 방법 false===대신 연산자를 사용하는 것입니다.==

내 생각 엔 PHP가 그것을 일종의 방정식으로 취급하고 있지만 약간 이상한 것 같습니다.

아무도 자세히 설명 할 수 있습니까?


"608E-4234"는 IS 플로트 번호 형식은 그들이 비교 할 때이 번호에 던져 있도록.

608E-4234그리고 272E-3063둘 것 float(0)이 너무 작기 때문에.

들어 ==PHP에서,

숫자를 문자열비교하거나 비교에 숫자 문자열이 포함 된 경우 각 문자열이 숫자로 변환되고 비교가 숫자로 수행됩니다.

http://php.net/manual/en/language.operators.comparison.php

주의:

==둘 다있는 자바 스크립트의 동작은 ===어떻습니까?

대답은 동작이 PHP와 다르다는 것입니다. 자바 스크립트에서 동일한 유형의 두 값을 비교하면는와 ==동일 ===하므로 두 개의 동일한 유형 값과 비교할 때 유형 캐스트가 발생하지 않습니다.

자바 스크립트에서 :

608E-4234 == 272E-3063 // true
608E-4234 == "272E-3063" // true
"608E-4234" == 272E-3063 // true
"608E-4234" == "272E-3063" // false (Note: this is different form PHP)

따라서 javascript에서 결과 유형을 알고 있으면 한 문자를 저장 하는 ==대신 사용할 수 있습니다 ===.

예를 들어 typeof연산자는 항상 문자열을 반환하므로

typeof foo == 'string'typeof foo === 'string'해가없는 대신 .


PHP는 부동 소수점에 IEEE 754를 사용하며 숫자가 너무 작아서 0으로 평가됩니다.

참조 : http://en.wikipedia.org/wiki/IEEE_floating_point

Name        Common name         Base    Digits  E min   E max   
binary32    Single precision        2   23+1    −126    +127        
binary64    Double precision        2   52+1    −1022   +1023       

나는 PHP가 이것을 과학적 구문으로 읽으며 다음과 같이 번역 될 것이라고 생각합니다.

608 x 10^-4234 == 272 x 10^-3063 

PHP는 이것을 0 = 0.


PHP는 부동 소수점 숫자로 그 문자열을 비교하고, 그렇게 둘은 제로인 해야 사용 ===, 연산자를


대답하려고합니다. "==="를 사용하는 경우 값 대신 유형으로도 확인합니다. "=="를 사용하는 경우 값이 동일한 지 확인하면됩니다.

여기여기를 참조 할 수 있습니다 .


이것이보고있는 것입니다 :
http://www.wolframalpha.com/input/?i=608E-4234&dataset=
http://www.wolframalpha.com/input/?i=272E-3063

변수에 맞지 않기 때문에 둘 다 0 또는 php가 선택하는 기본값과 동일하므로 동등합니다.

참고 URL : https://stackoverflow.com/questions/12598407/php-expresses-two-different-strings-to-be-the-same

반응형