gpt4 book ai didi

delphi - 使用临时变量改变格式化输出

转载 作者:行者123 更新时间:2023-12-03 18:22:05 27 4
gpt4 key购买 nike

在维护一些代码时,我遇到了这个语句:

 sActDiln := Format('%.*f',[tdDigits.ndd, Fields[itd].AsFloat * rfc / 100]);

为了查看发生了什么,我添加了一个 DOUBLE 类型的临时变量 (actDiln) 并更改了代码如下:

 actDiln := Fields[itd].AsFloat * rfc / 100;
sActDiln := Format('%.*f',[tdDigits.ndd, actDiln]);

当“Fields[itd].AsString”为35,“rfc”为109时,计算值由38.15变为38.14999999。当小数位数为 1 时,这会将计算值从 38.2 更改为 38.1。这导致了其他问题。

没想到使用这个临时变量会出现这样的问题。谁能解释这里发生了什么? future 避免这种情况的最佳做法是什么?

这说明了问题:

Uses DB, DBISAMTb;

procedure TForm1.FormShow(Sender: TObject);
var
t : TDBISAMTable;
actDiln, rfc : double;
actDilnE : extended;
sActDiln1, sActDiln2, sActDiln3 : string;
begin
t := TDBISAMTable.Create(Application);

WITH t DO BEGIN
TableName := 'xxx';
DataBaseName := 'Study';

Active := False;
Exclusive := False;
IF Exists THEN DeleteTable;

WITH FieldDefs DO BEGIN
Clear;
Add('fld', ftString, 10, False);
END;
WITH IndexDefs DO BEGIN
Clear;
END;
CreateTable;
Exclusive := True; //<<<<<<<<<<<<<
IndexName := '';
Open;
Append;
FieldByName('fld').AsString := '35';
Post;

rfc := 109;

actDiln := Fields[0].AsFloat * rfc / 100;
sActDiln1 := Format('%.*f',[1, Fields[0].AsFloat * rfc / 100]);
sActDiln2 := Format('%.*f',[1, actDiln]);
actDilnE := Fields[0].AsFloat * rfc / 100;
sActDiln3 := Format('%.*f',[1, actDilnE]);
ShowMessage(sActDiln1 + ' vs ' + sActDiln2 + ' vs ' + sActDiln3);
end;
end;

最佳答案

行内浮点计算通常是扩展类型。检查中间变量也扩展时的行为。

关于delphi - 使用临时变量改变格式化输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com