浮点型字段显示的小数位数多于字段大小

Float Field showing more decimal places than field size

提问人:SisMaster 提问时间:8/17/2022 最后编辑:Eirik A.SisMaster 更新时间:8/22/2022 访问量:245

问:

我正在从带有 MySQL 4.1 的 Delphi Seattle 10 迁移到带有 MySQL 5.7 的 Delphi Alexandria 11.1。 在那之后,我发现 字段类型有问题 ,使用该组件,这会从数据库中带来不同的结果。例如:FLOAT(16,6)TFDQuery

=>TFDQuery:

select ALTURA, LARGURA from tabprodutos (without ";")
ALTURA = 0,0199999995529652
LARGURA = 0,150000005960464

select ALTURA, LARGURA from tabprodutos; (with ";")
ALTURA = 0,02
LARGURA = 0,15

=>HeidiSQL 或 PHPMyAdmin:

select ALTURA, LARGURA from tabprodutos (with ";")
select ALTURA, LARGURA from tabprodutos; (without ";")
ALTURA = 0,020000
LARGURA = 0,150000

使用该组件,通过编写带有和不带有 “;” 的脚本来获得不同的结果,这个问题在 Delphi Seattle 中没有发生。在此示例中,我们需要并记录在数据库中的值是 0.02 和 0.15TFDQuery

我已经验证了字段不会发生问题,但我们希望保留字段并找到其他解决方案,方法是更改组件的某些参数、数据映射或其他解决这种情况的过程。DECIMALFLOAT

我知道打开是一种选择,但在整个系统上更改它们并不容易,所以有人知道是否有最佳解决方案吗?FormatFloatFieldEditor

德尔福 浮动精度 mysql-5.7 delphi-11-亚历山大

评论

1赞 Eric Postpischil 8/17/2022
FLOAT(M, D)并不意味着可以表示数字的十进制格式。它意味着具有足够精度的浮点格式,可用于存储最多 M 位数字的数字,因为原始值可以唯一区分——在转换为浮点格式后,将其转换为具有有效数字的十进制(即,将浮点数四舍五入到最接近的十进制数字)再现原始值......MMM
1赞 Eric Postpischil 8/17/2022
...数字有时显示为“0,020000”,有时显示为“0,0199999995529652”的问题来自转换为十进制,而不是存储的数字。
1赞 Eric Postpischil 8/17/2022
在MySQL 8.0.17中也是非标准的和不推荐使用的。它不应在新代码中使用。 是标准的,并指定位数,而不是十进制数字。FLOAT(M, D)FLOAT(P)
0赞 SisMaster 9/1/2022
很抱歉回答晚了,我一直在忙着解决一些公司问题。感谢 Eric Postpischil 的回复,也感谢 Eirik A. 编辑我的帖子。我理解字段类型过时的问题,但谁能说出对于 Delphi 11,在 TFDQuery 组件中使用分号 “ ;” 以及使用分号的后果是什么?

答: 暂无答案