그저 저의 생각을 끄적거려 봅니다.
:: 3/2 = 1 /// ???
위의 문제는 기본적으로 정수형을 정수형으로 나누는 것이니 다른 일반적인 언어들과 마찬가지로 1이 나오는 것은 당연할 것 같다는 생각입니다.
만일 위의 결과를 1.5를 얻고 싶으시면
=# select 3/ (2 * 1.0 );
?column?
//////////
1.5
(1 row)
또는
=# select 3 / CAST( 2 as real );
?column?
//////////
1.5
(1 row)
하는 방법이 있을 듯합니다.
:: 10.0/2.0 = 5 /// ??? 정수가 되어 버림.
:: 3.0 % 2.0 = 1 ///??? 역시 정수가 되어 버림
글쎄요, 저의 개인적인 생각으로는 5가 정수로 취급된다기 보다 소숫점이하 자리가 없어서 보이기를 그냥 정수처럼 보이는 것이 아닐까요?
bbs=# select 5.0;
?column?
//////////
5
(1 row)
위의 예에서 명시적으로 실수형을 넘겼음에도 5로 나오는 것을 보면 더욱 그렇다는 생각이 짙게 듭니다.
:: 3 % 2.0 = error /// ???
의 에러메시지를 보니까
bbs=# select 3 % 2.0;
ERROR: Unable to identify an operator '%' for types 'int4' and 'float8'
You will have to retype this query using an explicit cast
ERROR: Unable to identify an operator '%' for types 'int4' and 'float8'
You will have to retype this query using an explicit cast
라고 나오는데..메세지 상으로는 아마도 '%'연산자가 정수형과 실수형을 섞어서 사용할 수 없는것 같습니다.
bbs=# select cast( 3 as float8 ) / 2.0;
?column?
//////////
1.5
(1 row)
이와같이 명시적으로 cast를 해주니까 문제가 없이 되네요...
그냥 저의 생각입니다. 초보자라서...
김일형.
>>신현호 님께서 쓰시길<<
:: 7.1에서 나온 결과인데...
:: 정상인지 아니면 웃기는 경우인지... 나원...
::
:: 3/2 = 1 /// ???
:: 3.0/2.0 = 1.5
:: 10.0/2.0 = 5 /// ??? 정수가 되어 버림.
::
:: 3 % 2 = 1
:: 3 % 2.0 = error /// ???
:: 3.0 % 2.0 = 1 ///??? 역시 정수가 되어 버림
::
:: 뭔데... 이건...?
::
:: 우선은 시험해 본것만 씁니다.
:: PL/pgSQL 예제 만들다가 점점 이상해저서 ...
::
::
:: 인천의 나사 풀린 산호...
|