안녕하세요
날씨가 많이 덥네요...
오늘은 좀 기본적인 질문을 가지고 고수님을 찾아뵐까 합니다...
프로그램을 하다 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;
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;
>
>
>