delphi - 如何处理浮点数逼近?
问题描述
我有一个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();
解决方案
推荐阅读
- react-native - 如何让 onPress 触发 TextInput 内的 React Native Text 元素?
- typescript - 如何打字猫鼬toObject?
- linux - WSL 从 Ubuntu 在 Windows 中查找我的用户文件夹
- javascript - 'findIndex' 在 nodejs 中未定义
- c# - MailKit SearchQuery.FromContains("")
- spring-kafka - 如何在当前消息后关闭 Spring Boot Kafka 流处理应用程序
- python - 在 Django REST API 中将 json 数据作为带有新行的纯文本发布
- airflow - 为什么气流会跳过一天一天?
- django - Django 更改日期输入格式
- python - 如何通过屏幕抓取中的每个日期循环在python中附加csv文件?