Q&A

  • 데이타 입력시 소수점을 어떻게 처리을 하는지...
안녕하세요
수고 많습니다.

delphi 4.0 and ms-sql7.0을 사용하고 있습니다.
모든 부분에서 작업이 잘되고 있습니다.
그런데 문제는 money 부분에서 소수점 이하 부분 작업이 잘 되지가 않아서
이렇게 질문을 드립니다.

회사에서 원하는 데이타 형태는 1234.4567 소수점 4자리을 원합니다.
간단하게 Matr_Dan =1234.4567;이렇게 입력을 했지요
그런데 데이타베이스나 프로그램에서 입력된 데이타을 확인을 하면 이렇게 보입니다.
matr_dan=1234.46

여러 data type을 change을 하고 여러방법(contorl panel 나라별 숫자, 통화 변경)을 시도 했지만...
안되네요

그래서 sql server profiler을 이용하여 데이타을 추적을 했습니다.
아래 내용은 추적한 데이타 내용입니다..

그런데 이해가 안되는것은 Matr_qty,Dan,amt =Convert(money,'0.20')
왜 이렇게 되는지 이해가 되지가 않네요.
프로그램 소스에는 matr_qty:=22;
                          matr_dan:=0.008;
                          matr_amt:=0.016;
이렇게 프로그램화 되어 있는데 말 입니다.

왜 이렇게 되는지 설명을 부탁 드립니다.
소수점 4자리을 입력 할 수있는 방법이 없는지요

그럼
수고 하세요

*****************************************************

Update Forder_Bal set   MATR_COLOR   ='CZ/BLACK' ,  
                        MATR_QTY     =convert(money,'22.00')   ,  
                        MATR_DAN     =convert(money,'0.01')   ,  
                        MATR_AMT     =convert(money,'0.20'),      
                        MAtr_Size    ='1.6 * 10 * 5&6',    
                        in_Date      ='2005/03/23',      
                        MATR_NOTE    ='',    
                        INFO_DATE    ='2005/03/31',    
                        INFO_NAME    ='Candy',    
                        INFO_ID      ='Administrator',      
                        INFO_IP      ='192.168.0.103',      
                        INFO_WORK    ='Update',    
                        MATR_ITPRICE =convert(money,'0.01'),  
                        RECE_QTY     =convert(money,'22.00'),      
                        MATR_SHIP    ='HK',    
                        CONT_TYPE    ='1',    
                        COMP_CONT    ='1'      
where bill_no ='.PEWTER 1050323-18' and Seq ='002'      

****************************************************
2  COMMENTS
  • Profile
    권태훈 2005.04.01 23:22
    필드가 생성될때 큐런시(금전) 필드로 되어졌나 봅니다.

    달러 계산할때 몇달러 몇센트만 있지 0.1센트 단위는 없습니다.
    고로 1.99는 입력 되지만 1.991은 입력 안됩니다.

    테이블 깡통까지 올려주시면 확실할텐데 아마도 제 말이 맞을것 같습니다.

    넘버 필드로 바꿔서 사용하시면 해결될겁니다.

    항상 답변 쓰면서 느끼는건데, 이거 쓰다 틀리면 뭔 개쪽이냐? 라는 생각이 듬...

  • Profile
    Galaxy 2005.04.02 04:10
    안녕하세요
    수고 많습니다.

    님이 말한데로 그렇게 생성 되어있습니다. 그래서
    currency 대신에 float로 올 change을 했습니다.

    아래는 작업을 한 내용입니다.

                     ParamByNAme('pMATR_QTY'    ).ascurrency  :=NCells[7, i];
                     ParamByNAme('pMATR_ITPRICE').ascurrency   :=NCells[8, i];
                     ParamByNAme('pMATR_DAN'    ).ascurrency   :=NCells[9, i];
                     ParamByNAme('pmatr_AMT'    ).ascurrency   :=NCells[10,i];

    이렇게 바꾸어 습니다....
    원하는 소수점이 저장이 아주 잘됩니다..
    너무 감사 드립니다.

                     ParamByNAme('pMATR_QTY'    ).asfloat   :=NCells[7, i];
                     ParamByNAme('pMATR_ITPRICE').asfloat   :=NCells[8, i];
                     ParamByNAme('pMATR_DAN'    ).asfloat   :=NCells[9, i];
                     ParamByNAme('pmatr_AMT'    ).asfloat   :=NCells[10,i];

    그럼 수고 하세요