标题:关于高精度小数处理的问题
只看楼主
faqueerliu
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-8-9
 问题点数:0 回复次数:2 
关于高精度小数处理的问题
大家好,我有个问题想请教一下:
有一个时间数据(存于MySQL,类型为DateTime[3],即带三位毫秒的时间数据),现在要读取出来处理,使用ADO连接,如果采用field.asDatetime函数,则只能读取出包含年-月-日 小时-分-秒的数据,因此改用asSQLTimeStamp,这个返回结构中包含 年,月,日,时,分,秒,fractions(理解为毫秒或者更精细的时间数据),于是我需要将带毫秒的时间数据转换为一个浮点数进行下一步处理,问题就出在这里:
例如:返回一个SQLTimeStamp数据(2018/07/30 8:03:13.900),这个日期对应的浮点数是43311.3355775463,我想把毫秒数加在这个浮点数之后,即43311.3355775463900,因此操作如下:
在得到SQLTimeStamp之后,
1.获取正常日期数据(不包括毫秒数据,仅包含 年,月,日,时,分,秒)
2.获取该日期数据对应的浮点数
3.将该浮点数转化为文本,将毫秒数加到字符串末尾
4.将包含毫秒数据的字符串转化为浮点数,问题来了:
我需要转化的字符串为“43311.3355775463900”,但是通过strtofloat转换后始终只能得到6位小数(转换后得到43311.335578),后面被四舍五入,由于得到的数据精度达不到要求,无法在chart中得到正确的图形(X轴数据不正确),也使用过formatfloat的方法,得到的结果(结构体内的一个数,类型为extended,double也试过,类似的问题)始终无法满足精度要求,请问高精度的小数在Delphi中如何获取和保存?
谢谢!
搜索更多相关主题的帖子: 小数 处理 数据 毫秒 浮点数 
2019-08-09 23:47
cglzyz
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-1-28
得分:0 
浮点数精度问题,建议你可以用两部分分别储存,或者将所有数据都乘以百万来传递,看是否能提升小数点后精度。
2020-01-28 19:11
jdnyfz
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-4-20
得分:0 
可以用时间戳来存,就不用管小数点了
2020-04-20 18:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-496310-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.195583 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved