去年就Google过答案了
今天居然忘了还好当时告诉同事了他还记得。。
大致如下:
Delphi 中对ADO RS (或者ADO本身?)浮点字段有2种存储方式:
TFloatField(能存储全部精度)、TBCDField(转化后只能显示小数点后4位)
通过RS的EnableBCD来控制,该属性默认为True因而默认情况下,浮点字段的ASFloat 返回结果只保留了4位小数。
解决办法:在生成字段前设置该属性即可
例如我们程序中时间是使用OA时间存储的:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
这样 rs1.fieldbyname('fBeginDate').AsFloat 就能得到6位小数(到秒)
但DateTimeToStr( rs1.fieldbyname('fBeginDate').AsFloat ) 依旧不能正常显示到秒(至于为什么就不清楚了,版本是Delphi6 sp2)
解决办法是:
FormatDateTime('yyyy-mm-dd hh:nn:ss' ,rs1.fieldbyname('fBeginDate').AsFloat)