如何处理浮点数近似?

时间:2018-05-15 09:01:06

标签: delphi floating-point floating-accuracy delphi-2007

我有TDBEditTFloatField相关联,DisplayFormat = '0.################'12.123456789。 我已将字段值设置为'12,1234567890000005',并且我注意到我的编辑控件将其显示为DisplayFormat

enter image description here

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

无论如何,我想知道我怎样才能确保额外的小数字永远不会#34;神奇地"在用户键入值后显示?

我想通过删除一个'#'来缩短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(); 字符串,但我不知道这是否足以在任何情况下避免此问题。

示例:

GDALDataset *dataSet;
GDALAllRegister();
dataSet = (GDALDataset*)GDALOpenEx("ENCFILE.000",GDAL_OF_VECTOR,NULL,NULL,NULL);
if(dataSet == NULL)
{
    printf( "Open failed.\n" );
    exit( 1 );
}
else
{
    printf( "SUCCESS.\n" );
}

0 个答案:

没有答案