왜 parseInt(1/10000000)
결과가 1
일 때 parseInt(1/1000000)
결과가 0
일 때?함수 parseInt (1/10000000)는 1을 반환합니다. 왜?
나는 0
인 int i = -1/10000000;
과 같은 Java의 int 캐스팅과 비슷한 것을 필요로합니다.
양성으로는 Math.floor
을, 음수에는 Math.ceil
을 사용해야합니까? 아니면 다른 해결책이 있습니까?
왜 parseInt(1/10000000)
결과가 1
일 때 parseInt(1/1000000)
결과가 0
일 때?함수 parseInt (1/10000000)는 1을 반환합니다. 왜?
나는 0
인 int i = -1/10000000;
과 같은 Java의 int 캐스팅과 비슷한 것을 필요로합니다.
양성으로는 Math.floor
을, 음수에는 Math.ceil
을 사용해야합니까? 아니면 다른 해결책이 있습니까?
처음에 질문은 재미있을 것 같습니다. 그런 다음 1/10000000
이 무엇인지 살펴 보았습니다. 따라서
< 1/10000000
> 1e-7
: 당신은 정수로 절단 할 경우
< parseInt("1e-7"); // note `parseInt` takes a STRING argument
> 1
,이 작업을 수행 할 수 있습니다
function truncateToInteger(real) {
return real - (real % 1);
}
좀 더 흥미롭게도'parseInt (1/1000001)'은 9.입니다 : – PSL
여기에 "inb4"주석의 비트가 있지만'return real >> 0; '이 작동하는 비트 32 비트 숫자로 제한되며'real real - (실수 % 1);은 모든 부동을 지원합니다. –
또한 재미있는 점은 첫 번째 인수 인'parseInt'가 첫 번째 인수 ([spec (http://www.ecma-international.org/ecma-262/5.1/#sec-15.1)]에서'toString'을 호출한다는 것입니다. .2.2)),'parseFloat','toFixed'와'toPrecision'은 그렇지 않습니다. – adeneo
으로 parseInt 문자열 인수를 구문 분석 할 것으로 예상, 그래서로 변환 문자열 먼저.
1/1000000
문자열로 변환 할 때 "0.000001"
인 경우 parseInt는 "." 이후는 정수로만 사용되므로 0
으로 읽습니다.
1/10000000
문자열로 변환하는 것은 과학적 표기법 "1e-7"
를 사용하여 너무 작은, 그것은 단지 정수입니다 이후에서는 parseInt는, 이후 "E"모든 것을 무시, 그래서 1
로 읽습니다.
기본적으로 parseInt는 사용자가 수행해야하는 작업이 아닙니다.
>(-1/10000000)|0
0
>1234.56|0 // truncation
1234
>(2147483647+1)|0 // integer overflow
-2147483648
: 자바 스크립트의 모든 비트 연산 32 비트 INT의 수를 강제로 0으로 논리합 연산하는 그 이상으로 값을 변경하지 않기 때문에
는 0을 숫자를 정수로 변환, OR하려면
위대한 @baonn 오늘 새로운 것을 배웠습니다 –
AFAIK, x | 0은 asm.js의 정수에 대한 유형 힌트이기도합니다. 그냥 재미있는 사실. –
raddix 매개 변수는 어떻습니까? 같은 결과가 나옵니까? –
입니다. 1/10000000은 1e-7을 반환하고 1/1000000은 0.000001을 반환하기 때문입니다. 그것은 parseInt가 실제로 어떻게 작동하는지에 차이가 있습니다 ... – FrEaKmAn
@TimVermaelen 같은 결과. –