Q&A

  • RoundTo함수에 대해서
123,456.3412 이라는 수가 있으면
123,000으로 변환하고 싶어서 검색을 해본결과 RoundTo라는 함수를 사용하면 된다고 되어있는데요...
문제는 Math를 선언해주고 RoundTo함수를 사용했는데

[Error] Unit1.pas(38): Undeclared identifier: 'roundto'

라는 결과가 나오는군요... Math유닛에 들어가 뒤져봐도 없더군요..물론 헬프에도 없구요....쩝

저와 같은 분이 몇몇 계시는 걸로 알고 있는데요...델파이 5 이후로는 이 함수가 없어졌나요..?

어떻게 해야 할까요...고수님들 부탁할께요..
3  COMMENTS
  • Profile
    너구리 2004.04.14 22:13
    type
      TRoundToRange = -37..37;

    function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;

    function IntPower(const Base: Extended; const Exponent: Integer): Extended register;


    function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
    var
      LFactor: Double;
    begin
      LFactor := IntPower(10, ADigit);
      Result := Round(AValue / LFactor) * LFactor;
    end;

    function IntPower(const Base: Extended; const Exponent: Integer): Extended;
    asm
            mov     ecx, eax
            cdq
            fld1                      { Result := 1 }
            xor     eax, edx
            sub     eax, edx          { eax := Abs(Exponent) }
            jz      @@3
            fld     Base
            jmp     @@2
    @@1:    fmul    ST, ST            { X := Base * Base }
    @@2:    shr     eax,1
            jnc     @@1
            fmul    ST(1),ST          { Result := Result * X }
            jnz     @@1
            fstp    st                { pop X from FPU stack }
            cmp     ecx, 0
            jge     @@3
            fld1
            fdivrp                    { Result := 1 / Result }
    @@3:
            fwait
    end;

    라운드라는 함수는 있겠죠?

    델파이 6 에 있는 함수입니다.

    델파이 5 에는 없나부죠??

  • Profile
    nilriri™ 2004.04.14 22:11
    function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
    var
      LFactor: Double;
    begin
      LFactor := IntPower(10, ADigit);
      Result := Round(AValue / LFactor) * LFactor;
    end;


    7.0인데 Math.pas파일에 있는데요..6.0에도 있을듯..

    그리고 보시면 알겠지만 나눴다가 다시 곱해주는거네요..

    직접 만들어 사용하셔도 될거 같다는 생각이 드는데요..^^

    /1000 하신다음에.. * 1000 하시면.. ^^

    그럼..즐프~

  • Profile
    kc 2004.04.14 23:18

    델파이 5에는 RoundTo라는 함수가 없구요... 델파이 6 이후 부터 있는 모양이군요...고수님들이 알려준 함수를 따로 만들어 적용해 보니 아주 만족할 정도로 잘 됩니다..역시.....
    고맙구요...또 하나 배워갑니당...