本人维护了一个Delphi+Oracle开发的系统,近日用户反映数据小数位有问题。具体表结构及插入语句如下:
有表dd_eis_cs_ah_data,结构如下:字段名   类型    是否为空
CS_NB NUMBER N
CS_DATE DATE N
CS_VALUE FLOAT Y
CS_GF FLOAT Y
CS_YH FLOAT Y
CS_DG FLOAT Y
CS_TYPE NUMBER Y
CS_MANUAL NUMBER Y Delphi程序中有一段如下代码:
sql := 'insert into pmis.dd_eis_cs_ah_data(cs_nb,cs_date,cs_value,cs_gf,cs_yh,cs_dg,cs_type) '+
           'values(%d,to_date(''%s'',''yyyy-mm-dd''),%f,%f,%f,%f,%d)';
    sql := Format(sql,[ds_Eis.FieldByName('cs_nb').AsInteger,
                       DateToStr(ds_Eis.FieldByName('cs_date').AsDateTime),
                       ds_Eis.FieldByName('cs_value').AsFloat,
                       ds_Eis.FieldByName('cs_gf').AsFloat,
                       ds_Eis.FieldByName('cs_yh').AsFloat,
                       ds_Eis.FieldByName('cs_dg').AsFloat,
                       ds_Eis.FieldByName('cs_type').AsInteger
                       ]
                  );
我show了一下, ds_Eis.FieldByName('cs_value').AsFloat=23.456,
               ds_Eis.FieldByName('cs_gf').AsFloat=13.001,
               ds_Eis.FieldByName('cs_yh').AsFloat=456.456666,
               ds_Eis.FieldByName('cs_dg').AsFloat=23.1,
               ds_Eis.FieldByName('cs_type').AsInteger=0
这些参数的值小数位>3,但是show sql语句时,显示如下:
insert into pmis.dd_eis_cs_ah_data(cs_nb,cs_date,cs_value,cs_gf,cs_yh,cs_dg,cs_type) 
 values(23,to_date('2005-03-01','yyyy-mm-dd'),23.46,13.00,456.47,23.10,0)
这是为什么啊,小数位都成2位了。数据库中也看不出来精度设置啊!
我在怀疑%f是否有问题啊