快快帮忙解决,很急!!!!(200分)

  • 主题发起人 主题发起人 Superdong
  • 开始时间 开始时间
S

Superdong

Unregistered / Unconfirmed
GUEST, unregistred user!
有关数据类型问题。
问题如下:现在设计SQL Server数据库,设计结构时为Decimal(18,12)。
但是在Delphi读该字段的数据,但是不管用什么方法读,读出来都是为4小数。
要的是12位小数,怎么也出不来,怎么办呢?我用Float型也试了试但,是不知道为什么么,老是不准确,插入时的数值为:6.6666666,但数据库存为:6.666669999999993。这又是为什么?请帮忙解答?????谢谢!!!!
使用的是为:TADOQuery,都是用参数化操作。不管是更新,插入,还是读出都是为四位小数,当用Decimal(18,12)。我的要求数据一定要准确,这怎么解决呢?是Delphi的问题吗?还是Delphi的Bug!!!!
 
是Delphi的Bug
 
SELECT STR(123.45, 18,12)
 
不要用 Float 类型!
要是你嫌 Double 精度不够,可以用 Extended
 
你用BDE连SQL SERVER的吧?
在控制面板,BDE Administrator里有一项是关于数据精度设置的。
大概是BCD什么的,忘了。你可以找一下。
 
在 SQL server中尝试定义数据类型为 numeric,长度可不管或设定成
大于所有需要数位精度的长度,精度设定为需要的数位精度(包含大
于零的部分和小数部分,按照你的例子6.6666666,精度应设定为8或
以上),小数位数设定为你需要的小数位数(按照你的例子可设定为
7)。
另外,在delphi中写入数据库时,尽量使用Tquery控件,按照SQL语法
用Insert或Update将写入过程用SQL语句写出,然后执行Tquery.excuSQL,
这样写进数据库的较为精确。
如果SQL server中小数设定为7,但是需要写入的数字小数位数小于7,
如6.6666,最好写SQL语句时,在数值后面补加0,例如写成:
insert into DBname(fieldname) values(6.6666000)
该sql语句是你可以通过Tquery.sql.add()自由编写的。
 
后退
顶部