Number 형 데이터 타입관련해서 문의드립니다. 0 3 2,155

by 강서꽃미남 [SQL Query] [2015.02.06 16:40:04]


테스트중 number 타입에 의문이 들었습니다.

그래서 직접 테스트를 해봤습니다. 더욱 의문이 드네요 이게 맞는건가...^^

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
-- 테이블생성
create table test_pp (a number(5,2), b number(5,-2));
 
-- a컬럼에 테스트
insert into test_pp (a) values (4);
insert into test_pp (a) values (47);
insert into test_pp (a) values (478);
>> 이후 에러발생
insert into test_pp (a) values (4789);
insert into test_pp (a) values (43210);
insert into test_pp (a) values (432101);
 
-- 결론 뒤에 정밀도(2)공간을 미리 차지한다. 그래서 3자리 이상의 수는 못들어간다.
 
insert into test_pp (b) values (4);
-- 결과 0
insert into test_pp (b) values (47);
-- 결과 0
insert into test_pp (b) values (478);
-- 결과 500
insert into test_pp (b) values (4789);
-- 결과 4800
insert into test_pp (b) values (43210);
-- 43200
 
 
-- 메뉴얼은 이렇습니다. If you specify a negative scale, Oracle Database rounds the actual data to the specified number of places to the left of the decimal point. For example, specifying (7,-2) means Oracle Database rounds to the nearest hundredths, as shown in Table 26-1.
 
-- 7,456,123.89 > NUMBER(7,-2) > 7456100
 
 
-- 2차 테스트
insert into test_pp (b) values (50);
-- 결과 100
 
 
짐작하는 결론 , 1자리 수는 -2(2자리가 안되므로 소수점이) 0으로 표시
50은 2자리이며 올림수이므로 100 표시
 
 
-- 그렇다면 결론은 무조건 2자리 수에서 올림수 가 있으면 반올림하는건가요?

 

by 마농 [2015.02.06 17:01:01]

뭐가 의문인지가 안나와 있네.
결론만 있고 의문은 없군?
결론은 (수치 표시 형식)을 벗어나는 부분에 대해선 반올림 처리하는거지.
(5, 2) ==> 999.99 (소수 2째자리까지 표시, 3째자리에서 반올림) ==> ROUND(입력값, 2)
(5, -2) ==> 99900 (100단위까지 표시, 십단위에서 반올림) ==> ROUND(입력값, -2)


by 강서꽃미남 [2015.02.06 17:30:12]

제가 테스트 한게 맞는지 궁금했어요

지금 보니 질문이 이상했네요 :)

맞긴하군요.. 감사합니다! 

 


by 마농 [2015.02.06 17:39:32]

이따 보자~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입