首页 > 解决方案 > 如何处理浮点数逼近?

问题描述

我有一个TDBEdit连接到TFloatField一个DisplayFormat = '0.################'。我已将该字段的值设置为,12.123456789并且我注意到我的编辑控件将其显示为'12,1234567890000005'.

在此处输入图像描述

我对浮点数没有深入的了解,但我知道这是因为浮点数是近似的。

无论如何,我想知道如何确保在用户键入值后不会“神奇地”出现额外的小数?

我想DisplayFormat通过删除一个字符串来缩短字符串,'#'但我不知道这是否足以避免任何情况下的问题。

例子:

uses
  DBClient, DB, DBCtrls;

...

var
  Dst : TClientDataSet;
  Dsc : TDataSource;
  Fld : TFloatField;
  Edit : TDBEdit;
begin
  //components creation
  Dst := TClientDataSet.Create(Application);
  Dst.FieldDefs.Add('TEST', ftFloat, 0, False);
  Dst.CreateDataSet();

  Fld := Dst.Fields[0] as TFloatField;
  Fld.DisplayFormat := '0.################';

  Dsc := TDataSource.Create(Application);
  Dsc.DataSet := Dst;

  Edit := TDBEdit.Create(Application);
  Edit.DataSource := Dsc;
  Edit.DataField := Fld.FieldName;
  Edit.Align := alTop;
  Edit.Parent := Self;

  //test
  Dst.Open();
  Dst.Append();
  Fld.AsFloat := 12.123456789;
  Dst.Post();

标签: delphifloating-pointfloating-accuracydelphi-2007

解决方案


推荐阅读