Leo*_*Leo 5 delphi floating-point
看下面的代码,为什么Trunc函数的结果不同?
procedure TForm1.Button1Click(Sender: TObject);
var
D: Double;
E: Extended;
I: Int64;
begin
D := Frac(101 / 100) * 100;
E := Frac(101 / 100) * 100;
I := Trunc(D);
ShowMessage('Trunc(Double): ' + IntToStr(I)); // Trunc(Double): 1
I := Trunc(E);
ShowMessage('Trunc(Extended): ' + IntToStr(I)); // Trunc(Extended): 0
end;
Run Code Online (Sandbox Code Playgroud)
格式化功能并不总是显示实际数字(数据).
实数和精度可能很棘手.
看看这段代码,我在屏幕上看到的内容更精确:
D := Frac(101 / 100);
E := Frac(101 / 100);
ShowMessage(FloatToStrF(D, ffFixed, 15, 20));
ShowMessage(FloatToStrF(E, ffFixed, 18, 20));
Run Code Online (Sandbox Code Playgroud)
看起来D
是一样的东西0.010000000000
,而E
像0.00999999999
.
编辑: Extended
类型具有比Double
类型更好的精度.如果我们尝试使用FloatToString()显示D和E的值,我们可能会得到相同的结果,即使实际值不相同.