各位朋友:
    有一在开发过程中出现的问题, 一直没有找到解决的办法, 现公布出来, 希望大家发挥助人为乐的精神, 或求助其它人, 找出处理办法来, 在此致谢!
    问题是:
             在ms sql server环境下的数值字段结构的设置与处理, 现在设定的字段是 decimal(21,8), 保留8个小数字, 但是在现有的程序处理过程中小数点位数只能保存4位. 我的程序在bde连接时, 设定ENABLE BCD := 'TRUE', 这是为保证存盘数据不会出现误差而作的, 如果设定'FALSE'则比如数值 16.4 会变成 16.3999, 只有设定为'TRUE'可以避免这个问题, 但是, 设定为'TRUE', 小数字数就只能存为4位(设定为'FALSE'可以保存为8位), 这两方面发生冲突.
              如何设定这样的字段结构, 使之不会产生误差, 且能有8位小数, 这就是我想实现的, 请各位帮助, 找出解决问题的方案.
可在线讨论,工作日8:00~18:00在线
MSN:[email protected]   QQ:66557239

解决方案 »

  1.   

    再建一个新char 字段,4位.
    把剩余的4位,放里面扔就好了.
      

  2.   

    BDE是不是需要升级或打补丁?或者,不要再使用BDE了,换用ADO。我也处理有固定小数点的数据,比如输入数值为16.4,保存后再从MSSQL读取出来就是16.400(字段定义为decimal(8, 3)),没有遇到你所说的问题。
      

  3.   

    TO scsjs(闪电回归):
      我曾經考慮過這樣解決,但有所不同,我是將整個字段都設成varchar類型,但是事實上不行,因為我需要在後台做大量的運算
      

  4.   

    TO ddqqyy(ddqqyy):
      (1)我的程序规模可观,现在改用ADO并不现实;
      (2)我的BDE版本为5.01,不知道最新版本是多少?
      (3)问题中我已经说明清楚,如果ENABLE BCD设为TRUE,4位小数都是准确的,你字段定义为decimal(8, 3)应该遇不到我所说的问题,你可以尝试定义为decimal(21, 8);
      

  5.   

    1、你可以把数据定义为decimal(21, 10),显示时,只显示8位小数,这样存在误差也没有关系,8位小数肯定能正常显示
    2、可以把计量单位改小,比如本来是kg,改为mg,就增大了1000000倍,小数就只有两位了
      

  6.   

    TO scsjs(闪电回归):
    这种方法,我已思考过,上面我已经说明,我的程序规模比较大,每个这种类型的字段均放大10^8倍,并且后台运算程序也需要修改,修改工作量可想而知,不大现实;
      

  7.   

    TO lzh54321(李志华):
    (1) 我刚测试过,定义为decimal(21, 10),存储在MSSQL里面的值只是多了两个9,即为16.3999999999,误差依然存在,我期望存储的结果为:16.4
    (2) 修改计量单位的可行性不大,我的数据库这种类型的数据类别比较多,没有办法控制修改计量单位,另:像kg这样的单位有mg,但是有的单位根本就没有这种能缩小的单位,比如最常见的“个”;