Delphi的数据精度问题,没有任何类型可以与mssql2000匹配(50分)

  • 主题发起人 主题发起人 bsense
  • 开始时间 开始时间
B

bsense

Unregistered / Unconfirmed
GUEST, unregistred user!
环境:windowsxp,mssql2000,delphi7
创建一个表 test ,两个字段 f1 float,f2 numeric(18,6)
两个字段真实数据
64.9676412219335 float 类型
64.967652 numeric(18,6)

delphi7用ado连接,adotable 打开,dbgrid表格里面数据
已经变化
64.9676412219335
64.9677
再分别使用currency,single,double 类型变量,用ascurrency,asdouble 读数据如下
Delphi的数据
========================
64.96760000000000 currency类型
64.96764373779297 single
64.96764122193346 double
================================
64.96770000000000 currency
64.96769714355469 single
64.96769999999999 double

用AsVariant 类型 可以获得 正确值
推测dbgrid是用 AsVariant ,再转换string ,能正常显示float数据,但仍然不能显示numeric类型
暂时下结论,使用delphi开发mssql的float,numeric 类型数据,是没有绝对精确的数据类型与之匹配的.欢迎砖头.
 
的确如此。。
没有任何类型可以与mssql2000匹配
 
asbcd也是不行的
 
可以尝试一下extended类型
 
这是双精度类型的特点,开发工程中非常容易出错的。
为了保证数据库里的值不至于有太多的小数位,或者极小绝对值的数(按理应该是0),
不得不经常在SQL语句中使用Round函数,以确保程序逻辑的正确性。
 
做数据库就用C#吧。ADO.NET。处理表格的功能要比delphi的ADO 强大的多。
 
后退
顶部