程序中可由用户自定义设定小数点位数,但我发现一个问题,数据集中DisplayFormat和EditFormat我已经根据这个小数点位置进行控制了,但这个浮点型的值保存到数据库里面还是小数点后四位,FieldKink类型是fkData,用TDBEdit进行输入,在运算的时候还是四位,这样就造成了在DBGridEH显示合计时有了误差。
因为用户设定了只显示小数点后两位,程序上已经显示了两位,但在DBGridEH合计时还是用数据库中的值进行合计的,结果就造成了合计出来的值和上面行数加起来的值有了误差。这个问题需要怎么解决啊
因为用户设定了只显示小数点后两位,程序上已经显示了两位,但在DBGridEH合计时还是用数据库中的值进行合计的,结果就造成了合计出来的值和上面行数加起来的值有了误差。这个问题需要怎么解决啊
BZGS:=StrToFloat(FormatFloat('0.#####',StrToInt(edt_iCCL.EditValue)* GetMESHsKF(VarToStr(edt_icbzx.EditValue),Hs)));
qry_BB.FieldByName('BZGS').AsFloat:=BZGS;
end;
cxGridDBTableView8DBColumn10.EditValue :=cast( cast( cxGridDBTableView8.DataController.GetRowValue(cxGridDBTableView8.DataController.GetRowInfo(0),7) as float) /cxGridDBTableView8.DataController.GetRowValue(cxGridDBTableView8.DataController.GetRowInfo(0),9) as decimal(15,2));
2.SQL中:
select convert(numeric(18,2),sum(ColName) )
select Convert(decimal(18,2),100.1231234) 输出结果:100.12
select Convert(decimal(18,2),100) 输出结果:100.00
uses math;
1.RoundTo(value, -2);
2.StrToFloat(FormatFloat( '0.00 ', value));
2、浮点数的运算最好用SQL;
3、如必须使用objectpascal计算,在使用Roundto函数时不会按中国习惯进行四舍五入时,需要自己设计函数计算。
你用的应该是MS SQL数据库吧?‘数据库里面用的是numeric(24,8)。’很不幸,DELPHI对浮点数表达不精确,比如1.11就可能是1.19999999999...这样的,而你数据库里字段设置为numeric是没问题的,但小数位数达到了8位,所以就会把DELPHI表达不精确的FLOAT存入数据库,你把你往数据库里这个字段保存值的代码贴出来,改进下问题应该可以解决,
不要类似这样 FieldByName('xyz').AsFloat:=StrToFloat('1.234')
这样看看
var
tmpVal:Real;
....
tmpVal:=StrToFloat('1.234');
...
FieldByName('xyz').Value:=tmpVal;