Double 형 변수계산식 코드와 결과값입니다.
결과값이 이상하게 나오는 원인을 알고싶습니다.
Double 형 대신에 Currency 형을 쓰면 정확한 값이 나오긴 합니다.
하지만 Currency형은 소숫점이 4자리까지만 표현하기때문에.. 소숫점 5자리 이상은 계산을 못하네요~
해결방법으론 Double 대신에 String을 써서 계산하면 되긴하겠지만.. 워낙 코딩이 길어져서~ ^^ㅋ
//코드
procedure TForm1.Button2Click(Sender: TObject);
var
i : double;
begin
Memo1.Clear;
i := -2;
while i <= 2 do
begin
Memo1.Lines.Add(FloatToStr(i));
i := i + 0.01;
end;
end;
//결과
-2
-1.99
-1.98
-1.97
...
-1.03
-1.02
-1.01
-0.999999999999999
-0.989999999999999
-0.979999999999999
...
-0.119999999999998
-0.109999999999998
-0.0999999999999983
-0.0899999999999984
-0.0799999999999984
...
-0.0199999999999984
-0.00999999999999837
1.63390114426513E-15
0.0100000000000016
0.0200000000000016
...
0.980000000000002
0.990000000000002
1
1.01
전에도 같은 질문이 있었는데요...
FloatToStr가원래 Extended형의 실수로 정확도(significant digits.)는 15이고
general number format이므로 Double형이 안맞는 경우가 발생합니다.
그래서 이럴경우 저는 4가지중 하나를 썼었습니다.
1방법.FloatToStrF를 사용하되 general number format이 아닌 ffFixed로사용하시던지
2방법. FormatFloat등 일반 Format류의함수를 사용하시던지
3방법. 위 변수 i를 Extended형으로 사용하시던지
4방법.FloatToStr대신 CurrToStr함수를 사용해보시던지요.
다른방법도 많을겁니다. 저는 3이나 4방법을 많이 썼습니다.