有关数据类型问题。
问题如下:现在设计SQL Server数据库,设计结构时为Decimal(18,12)。
但是在Delphi读该字段的数据,但是不管用什么方法读,读出来都是为4小数。
要的是12位小数,怎么也出不来,怎么办呢?我用Float型也试了试但,是不知道为什么么,老是不准确,插入时的数值为:6.6666666,但数据库存为:6.666669999999993。这又是为什么?请帮忙解答?????谢谢!!!!
使用的是为:TADOQuery,都是用参数化操作。不管是更新,插入,还是读出都是为四位小数,当用Decimal(18,12)。我的要求数据一定要准确,这怎么解决呢?是Delphi的问题吗?还是Delphi的Bug!!!!
问题如下:现在设计SQL Server数据库,设计结构时为Decimal(18,12)。
但是在Delphi读该字段的数据,但是不管用什么方法读,读出来都是为4小数。
要的是12位小数,怎么也出不来,怎么办呢?我用Float型也试了试但,是不知道为什么么,老是不准确,插入时的数值为:6.6666666,但数据库存为:6.666669999999993。这又是为什么?请帮忙解答?????谢谢!!!!
使用的是为:TADOQuery,都是用参数化操作。不管是更新,插入,还是读出都是为四位小数,当用Decimal(18,12)。我的要求数据一定要准确,这怎么解决呢?是Delphi的问题吗?还是Delphi的Bug!!!!
解决方案 »
- 关于 TtntForm 多语言窗体 的 WinClassName 赋值!
- 定义的结构类型不能使用
- 帮忙解释一下“映像”和“实例”的意思、区别。另外解释一段话呗,话的内容在正文里。顶者有分!
- 散分&调查,听说男程序员生的孩子80%都是女孩。
- 安装后执行报错“未找到提供程序。该程序可能未正确安装"
- 各位高手!!delphi用第几版本?
- 在sql里给ACCESS库自动建表,执行后表可建成,但报错"Microsoft JET数据库引擎找不到输入表或查询"t_milk",确定他是否存在"
- db-lib是个什么东东呢????有没有相关的资料呢???
- 邮件监测器要怎么写??
- 如果一个接口只有dispinterface声名没有interface声名如何使用?
- 用TTable的AddIndex方法,给一个已建数据表建立索引,出现"Table is busy."异常,是什么原因?
- com的跟踪
换成ADO看一看;
再者,你的Decimal(18,12)确定无错?:)
--------------------------------------------------------------------
招聘斑竹我们可以一起交流;
呵呵
www.nxrs.net/bbs
谢谢,别抛砖
请看看:
Data_1 : real;
Data_2 : Extended ; ADOQuery1.SQL.Text := 'select * from f_exam where Super_ID=''1''';
ADOQuery1.Open ;
data_1 := ADOQuery1.fieldByName('superdata_1').asFloat;
Data_2 :=ADOQuery1.fieldByName('superdata_1').AsVariant ;
listbox1.Items.Add(floattostr(data_1));
listbox1.Items.Add(floattostr(data_2));
结果呢:Data_1和Data_2的数据均为四为小数。
下面是为写:
var
f_SQLString:string;
begin
with TADOQuery.Create(nil) do
begin
try
Connection := dmMainADO.ADOConnectMain ;
f_SQLString := 'insert into f_exam(Super_ID, SuperData_1, SuperData_2,' +
'SuperDate_3, SuperData_4)values(:Super_ID, :SuperData_1, :SuperData_2,' +
':SuperDate_3, :SuperData_4)';
sQL.Text :=f_SQLString;
Parameters[1].DataType := ftfloat;
Parameters[4].DataType := ftfloat;
Parameters.ParamByName('Super_ID').Value := '7';
Parameters.ParamByName('SuperData_1').Value := 4.2344444411;
Parameters.ParamByName('SuperData_2').Value := 4.555555555;
Parameters.ParamByName('SuperDate_3').Value := 6.6666666;
Parameters.ParamByName('SuperData_4').Value := 7.69666666;
ExecSQL;
finally
Free;
end;
end;
结果写进去的都为四位小数。
对于用ftBCD,我也用过,但是仍然是四位。数据库设计没有问题。