2012-12-26 3 views
3

URL에 23 자리 숫자를 사용해야합니다. Math.random()을 사용하여 숫자를 생성하지만 지수 형식으로 결과를 얻습니다.자바 스크립트에서 지수 번호를 정수로 변환

내 코드

var id = (Math.random()*11111111111111111111111).toFixed(23); 

하지만

6.286119436349295e+21 어떻게 정수로 "ID"에 임의의 값을 저장하기 위해 나는이 발생할 수있어?

+0

'숫자'는 10 진수입니다. – xtofl

답변

0

수 없습니다. 64 비트 정수, 32 비트 정수보다 훨씬 적습니다. 임의 길이의 정수 라이브러리를 사용하십시오.

1

자바 스크립트 숫자가 정확하지 않습니다. 당신은 완전한 23 개의 임의의 숫자를 결코 얻을 수 없을 것입니다. 여러 개의 작은 숫자를 가져 와서 문자열로 붙여 넣기가 더 쉬울 것입니다.

0

두 부분으로 숫자를 만들어 문자열로 결합하십시오.

var id1 = Math.floor(Math.random() * 10e10); // 11 digits 
var id2 = Math.floor(Math.random() * 10e11); // 12 digits 

var id = id1+''+id2; 
2

자바 스크립트는 실제로 이 전부는 아니지만 그들 중 큰 (작은) 정수를 나타낼 수 -9007199254740992와 9007199254740992. 사이의 연속 정수를 나타낼 수 있습니다! 실제로 9007199254740992 이후의 "다음"정수는 9007199254740994입니다. 잠시 동안 두 개 떨어져 있고, 그 다음 4 개가 떨어져 나간 다음 8 개가됩니다. 눈치 챘 겠지만, 실제로 커지면 과학 표기법으로 표시됩니다. toFixed의 결과조차 숫자로만 구성된 양식으로 표시되는 것은 아닙니다.

그래서 23 진수의 범위에있는 정수를 계산할 때 자바 스크립트의 네이티브 Number 유형 (IEEE-754 64 비트)을 사용하여 무리를 나타낼 수 없습니다.

함께 작은 정수를 붙여 수있는 당신이 당신의 임의의 숫자에 대한 특정 유통, 0..9이 작동 할 수있는 알파벳을 통해 임의의 문자열에 대한 상관 없어,하지만 당신 있습니다 다음 특정 분포를 찾는 경우에 당신이해야하는 경우

(Ignacio Vasquez-Abrams가 제안한 것처럼) 임의 길이의 정밀도를 지원하는 라이브러리를 사용합니다.

관련 문제