2016-08-29 2 views
-1

는 2014 년은 버그가있는 숫자입니까? SQL 서버에서 명령 울부 짖는 소리를 실행

select ISNUMERIC('1E234') -- return 1 
    select ISNUMERIC('1E2341') -- return 0 

내가 기대하는 첫번째 선택 0을 반환

내 솔루션 :

 -- if return 0 is numeric 
    select PATINDEX('%[^0-9]%','1E234') 
    select PATINDEX('%[^0-9]%','1E2341') 
    select PATINDEX('%[^0-9]%','102341') 

감사합니다!

+4

무엇이 질문입니까? – jarlh

+3

isnumeric는 'float'과'real'을 지원합니다 : https://msdn.microsoft.com/en-CA/library/ms173773.aspx +/- 1e308, 기본적으로. 'e2341'이 허용 범위를 벗어났습니다. –

+0

중복? http://stackoverflow.com/questions/5988939/isnumeric07213e71-true –

답변

2

1e234는 실제로 인 입니다. 이것은 과학 표기법으로 의미는 다음과 같습니다. 1.00. (a 계산기에 해당 던져!) 다른 예를 강조하기 위해, 3.1 × 10 24 같다 3.1e24 것이다.

이것이 결과를 얻는 이유입니다. 정확합니다 (최대 한도까지).

3.1E24 => 3,100,000,000,000,000,000,000,904 

1E234 => 1,000,000,000,000,000,256,144, 
      240,016,312,560,912,656,840,512, 
      968,136,864,872,232,424,776,040, 
      744,208,304,800,656,032,440,648, 
      488,920,616,296,544,576,976,448, 
      056,376,040,432,472,424,840,856, 
      440,904,776,056,632,368,528,312, 
      448,144,432,344,224,424,808,952, 
      160,472,416,864,520,520,320,112, 
      296,192,360,016,000,088,968 

1E2341 => too big to calculate!!! 

솔루션의 문제는, 때로는 e 너무 컴퓨터 과학 숫자 표기법에 사용되기 때문에 전자 표기하는 번호로 고려되어야한다는 것입니다.

관련 문제