Q&A

  • interger의 범위를 넘어서


안녕하세요

날씨가 많이 덥네요...



오늘은 좀 기본적인 질문을 가지고 고수님을 찾아뵐까 합니다...



프로그램을 하다 Error를 하나 만나게 되었는데.."Invalid Floating Point Operation"



integer의 범위를 넘어서 error가 발생한다고 찾아보았읍니다.



책을 찾아보니 integer의 범위가 -2147483648...2147483647 이더군요...



그런데 저는 최고로 백억단위(40000000000)의 숫자가 나와야 하는데..



어떤 것을 사용해야 하는지 알 수가 없읍니다.



고수님의 작은 관심 부탁드립니다.



날씨가 많이 덥네요... 건강하시고 항상 행복하세요...





아래 코딩은 감가상각을 구하고 계산된 잔존가액의 합계(Calsum)를 구하는 것입니다.

참고로 적어보았읍니다.....



// 감가상각 계산(정액법)

procedure TEMain.Query1CalcFields(DataSet: TDataSet);

var CurDate, curDateO, N_O : TDateTime; // 금일 , 납품일, 금일-납품일

Year, Month, Day, YearO,MonthO,DayO : Word;



Calsum : integer; // <- - - - 이곳에 주목해주세요....



begin

// 현재날짜 입력

CurDate := now;

DecodeDate(CurDate, Year, Month, Day);



~~~~ 생략 ~~~~~



while not Query7.eof do begin

if(Query7.FieldByName('DateOffer').value = null) or

(Query7.FieldByName('Price').value = null) or

(Query7.FieldByName('Equipvalue').value = null) then

Query7.next

else begin

CurDate := Query7.FieldByName('DateOffer').Asdatetime;// 취득년

DecodeDate(Curdate, YearO, MonthO, DayO);

N_O := Year - YearO;



if N_O <= Query7.FieldByName('Equipvalue').AsInteger then begin

if MonthO <=6 then begin

calsum := calsum + Query7.FieldByName('Price').value*

(Query7.FieldByName('Equipvalue').value-N_O)/

Query7.FieldByName('Equipvalue').value;

end

else begin

with Query7 do begin

calsum := calsum + Query7.FieldByName('Price').value*

(Query7.FieldByName('Equipvalue').value-N_O+0.5)/

Query7.FieldByName('Equipvalue').value;

end;

end;

end else

calsum := 0;

end;

Query7.next;

end;

Edit4.text := IntToStr(calsum);



end;







1  COMMENTS
  • Profile
    김정선 2001.07.07 01:58




    int64 를 함 사용해 보시면....어떠실지..





    아기코알라 wrote:

    >

    > 안녕하세요

    > 날씨가 많이 덥네요...

    >

    > 오늘은 좀 기본적인 질문을 가지고 고수님을 찾아뵐까 합니다...

    >

    > 프로그램을 하다 Error를 하나 만나게 되었는데.."Invalid Floating Point Operation"

    >

    > integer의 범위를 넘어서 error가 발생한다고 찾아보았읍니다.

    >

    > 책을 찾아보니 integer의 범위가 -2147483648...2147483647 이더군요...

    >

    > 그런데 저는 최고로 백억단위(40000000000)의 숫자가 나와야 하는데..

    >

    > 어떤 것을 사용해야 하는지 알 수가 없읍니다.

    >

    > 고수님의 작은 관심 부탁드립니다.

    >

    > 날씨가 많이 덥네요... 건강하시고 항상 행복하세요...

    >

    >

    > 아래 코딩은 감가상각을 구하고 계산된 잔존가액의 합계(Calsum)를 구하는 것입니다.

    > 참고로 적어보았읍니다.....

    >

    > // 감가상각 계산(정액법)

    > procedure TEMain.Query1CalcFields(DataSet: TDataSet);

    > var CurDate, curDateO, N_O : TDateTime; // 금일 , 납품일, 금일-납품일

    > Year, Month, Day, YearO,MonthO,DayO : Word;

    >

    > Calsum : integer; // <- - - - 이곳에 주목해주세요....

    >

    > begin

    > // 현재날짜 입력

    > CurDate := now;

    > DecodeDate(CurDate, Year, Month, Day);

    >

    > ~~~~ 생략 ~~~~~

    >

    > while not Query7.eof do begin

    > if(Query7.FieldByName('DateOffer').value = null) or

    > (Query7.FieldByName('Price').value = null) or

    > (Query7.FieldByName('Equipvalue').value = null) then

    > Query7.next

    > else begin

    > CurDate := Query7.FieldByName('DateOffer').Asdatetime;// 취득년

    > DecodeDate(Curdate, YearO, MonthO, DayO);

    > N_O := Year - YearO;

    >

    > if N_O <= Query7.FieldByName('Equipvalue').AsInteger then begin

    > if MonthO <=6 then begin

    > calsum := calsum + Query7.FieldByName('Price').value*

    > (Query7.FieldByName('Equipvalue').value-N_O)/

    > Query7.FieldByName('Equipvalue').value;

    > end

    > else begin

    > with Query7 do begin

    > calsum := calsum + Query7.FieldByName('Price').value*

    > (Query7.FieldByName('Equipvalue').value-N_O+0.5)/

    > Query7.FieldByName('Equipvalue').value;

    > end;

    > end;

    > end else

    > calsum := 0;

    > end;

    > Query7.next;

    > end;

    > Edit4.text := IntToStr(calsum);

    >

    > end;

    >

    >

    >