Q&A

  • DisplayFormat을 이용해서 숫자의 일정 자리만큼만 표시할 수 있나요?
예를 들어, 데이터가

129,999,999

일때,

129,999

이렇게 표시할 수 있는가 해서요.



조언부탁드립니다.

5  COMMENTS
  • Profile
    홍성락 2001.11.09 04:44
    훈 wrote:

    > 예를 들어, 데이터가

    > 129,999,999

    > 일때,

    > 129,999

    > 이렇게 표시할 수 있는가 해서요.

    >

    > 조언부탁드립니다.

    ///////////////////////////////////////////

    혹시 단위에 따라 절사값을 표시하려는지요?

    돈으로 하겠습니다

    129,999,999원을 129,999천원이라할때

    procedure TForm1.Button6Click(Sender: TObject);

    var

    s, t : integer;

    str : string;

    begin

    str := '129,999,999';

    str := StringReplace(str, ',', '', [rfReplaceAll]); //문자에서 ,를 삭제

    //Trunc는 절사, Round를 쓰시면 반올립됩니다

    Edit1.Text := FormatFloat('#,##0', Trunc(StrToFloat(str)/1000));

    end;

  • Profile
    2001.11.09 18:58
    님의 말씀대로, 단위에 따라 절사를 하려고 하는 것이나.

    절사에 따른 반올림에 대한 차이로 인해,

    최종 데이터에서 값이 일단위 하가 상당히 납니다.

    일단위의 값이 4일 것이 5가되거나, 3이 되듯, 작은 차이가 아니라.

    2가 될것이 9가 되기도 하고, 게다가 단위가 억단위이면, 숫자는 7의 오차가 있지만,

    금액은 7억이 차이가 나는 것이지요.

    이런 현상은 제가 여러데이터를 억단위로 구하고(각각의 값도 보여줘야 하기 때문에),

    그 금액의 합계를 구하게 되어 각각의 값에 1씩의 오차가, 합계에서는 8또는 9정도의 오차가 생긴다는 것이지요.



    성락님의 말씀대로라면,

    Edit 혹은 DBEdit에 Display할 때마다 함수를 하나 만들어서 사용해야 한다는 것인데...

    그것도 생각해봤지만, 코드가 깔끔하지 못한 것 같아서..



    DisplayFormat으로는 안되는가요?



    -_-;



    홍성락 wrote:

    > 훈 wrote:

    > > 예를 들어, 데이터가

    > > 129,999,999

    > > 일때,

    > > 129,999

    > > 이렇게 표시할 수 있는가 해서요.

    > >

    > > 조언부탁드립니다.

    > ///////////////////////////////////////////

    > 혹시 단위에 따라 절사값을 표시하려는지요?

    > 돈으로 하겠습니다

    > 129,999,999원을 129,999천원이라할때

    > procedure TForm1.Button6Click(Sender: TObject);

    > var

    > s, t : integer;

    > str : string;

    > begin

    > str := '129,999,999';

    > str := StringReplace(str, ',', '', [rfReplaceAll]); //문자에서 ,를 삭제

    > //Trunc는 절사, Round를 쓰시면 반올립됩니다

    > Edit1.Text := FormatFloat('#,##0', Trunc(StrToFloat(str)/1000));

    > end;

  • Profile
    잘난체... 2001.11.09 19:10
    훈 wrote:



    최종 데이터에서 값이 일단위 하가 상당히 납니다.



    <답변>



    표기만 천단위로 하고 싶으신것 같군요...



    앞에 분의 답변 소스를 잘 참조 하셔서....



    훈씨께서 각각의 데이타를 그때 마다 절사해서 그것을로 합을 하면...



    최종에가서는 큰 차이가 있지요....



    절사해서 디스플레이하고 , 값은 절사안한값으로 합산을 낸뒤에 최종천단위 절사를



    해야 하지 않을 까요?

















    > 님의 말씀대로, 단위에 따라 절사를 하려고 하는 것이나.

    > 절사에 따른 반올림에 대한 차이로 인해,

    >

    일단위의 값이 4일 것이 5가되거나, 3이 되듯, 작은 차이가 아니라.

    > 2가 될것이 9가 되기도 하고, 게다가 단위가 억단위이면, 숫자는 7의 오차가 있지만,

    > 금액은 7억이 차이가 나는 것이지요.

    > 이런 현상은 제가 여러데이터를 억단위로 구하고(각각의 값도 보여줘야 하기 때문에),

    > 그 금액의 합계를 구하게 되어 각각의 값에 1씩의 오차가, 합계에서는 8또는 9정도의 오차가 생긴다는 것이지요.

    >

    > 성락님의 말씀대로라면,

    > Edit 혹은 DBEdit에 Display할 때마다 함수를 하나 만들어서 사용해야 한다는 것인데...

    > 그것도 생각해봤지만, 코드가 깔끔하지 못한 것 같아서..

    >

    > DisplayFormat으로는 안되는가요?

    >

    > -_-;

    >

    > 홍성락 wrote:

    > > 훈 wrote:

    > > > 예를 들어, 데이터가

    > > > 129,999,999

    > > > 일때,

    > > > 129,999

    > > > 이렇게 표시할 수 있는가 해서요.

    > > >

    > > > 조언부탁드립니다.

    > > ///////////////////////////////////////////

    > > 혹시 단위에 따라 절사값을 표시하려는지요?

    > > 돈으로 하겠습니다

    > > 129,999,999원을 129,999천원이라할때

    > > procedure TForm1.Button6Click(Sender: TObject);

    > > var

    > > s, t : integer;

    > > str : string;

    > > begin

    > > str := '129,999,999';

    > > str := StringReplace(str, ',', '', [rfReplaceAll]); //문자에서 ,를 삭제

    > > //Trunc는 절사, Round를 쓰시면 반올립됩니다

    > > Edit1.Text := FormatFloat('#,##0', Trunc(StrToFloat(str)/1000));

    > > end;

  • Profile
    탁발승 2001.11.09 05:55
    "#,##0" 요 부분이 의미하는 바는 무엇인가염?

    궁금해서리....^^;

    trunc가 쓰였으니 첫째자리에서 절사하라는 건가염....?

    그럼 소수 둘째짜리는 어떤 식으로 하나염?

    #문자를 조합해 쓰는 규칙이 궁금하네염....

    답변 부탁드립니다.

    아직 먼길을 걷는 땡초.....올림...



    홍성락 wrote:

    > 훈 wrote:

    > > 예를 들어, 데이터가

    > > 129,999,999

    > > 일때,

    > > 129,999

    > > 이렇게 표시할 수 있는가 해서요.

    > >

    > > 조언부탁드립니다.

    > ///////////////////////////////////////////

    > 혹시 단위에 따라 절사값을 표시하려는지요?

    > 돈으로 하겠습니다

    > 129,999,999원을 129,999천원이라할때

    > procedure TForm1.Button6Click(Sender: TObject);

    > var

    > s, t : integer;

    > str : string;

    > begin

    > str := '129,999,999';

    > str := StringReplace(str, ',', '', [rfReplaceAll]); //문자에서 ,를 삭제

    > //Trunc는 절사, Round를 쓰시면 반올립됩니다

    > Edit1.Text := FormatFloat('#,##0', Trunc(StrToFloat(str)/1000));

    > end;

  • Profile
    홍성락 2001.11.09 06:13
    탁발승 wrote:

    > "#,##0" 요 부분이 의미하는 바는 무엇인가염?

    > 궁금해서리....^^;

    > trunc가 쓰였으니 첫째자리에서 절사하라는 건가염....?

    > 그럼 소수 둘째짜리는 어떤 식으로 하나염?

    > #문자를 조합해 쓰는 규칙이 궁금하네염....

    > 답변 부탁드립니다.

    > 아직 먼길을 걷는 땡초.....올림...

    /////////////////////////////////////////////////////////////////////////////////

    "#,##0" 요 포멧문자로 조합된 기호이고요, 여러함수에서 사용하므로 익혀놓으시면 좋습니다.

    근데 델파이헬프파일에 보시면 아주잘나오는데요. 제가 설명을 길게해보 헬프보시면 이해가 빠르답니다.

    아주간단히 #는 값이0이나 없으면 공백처리

    0은 값이 없거나 0값이면 그자리만큼 0으로 채우기

    ,는 3자리마다 표시하라고 뒤에서 4번째 쓴겁니다.

    (FormatFloat앞에 커서놓고 F1키누른후보시구요 예제버튼도 눌러보세요)



    trunc함수는 무조건 소숫점이하는 절사하라는겁니다.

    따라서

    A := 123.456 일때(소숫점입니다)

    trunc(A*10) => 1234

    trunc(A*10)/10 => 123.4

    trunc(A*100)/100 => 123.45

    trunc(A*1000)/1000 => 123.456



    ###############################################################################

    > 홍성락 wrote:

    > > 훈 wrote:

    > > > 예를 들어, 데이터가

    > > > 129,999,999

    > > > 일때,

    > > > 129,999

    > > > 이렇게 표시할 수 있는가 해서요.

    > > >

    > > > 조언부탁드립니다.

    > > ///////////////////////////////////////////

    > > 혹시 단위에 따라 절사값을 표시하려는지요?

    > > 돈으로 하겠습니다

    > > 129,999,999원을 129,999천원이라할때

    > > procedure TForm1.Button6Click(Sender: TObject);

    > > var

    > > s, t : integer;

    > > str : string;

    > > begin

    > > str := '129,999,999';

    > > str := StringReplace(str, ',', '', [rfReplaceAll]); //문자에서 ,를 삭제

    > > //Trunc는 절사, Round를 쓰시면 반올립됩니다

    > > Edit1.Text := FormatFloat('#,##0', Trunc(StrToFloat(str)/1000));

    > > end;