程序中可由用户自定义设定小数点位数,但我发现一个问题,数据集中DisplayFormat和EditFormat我已经根据这个小数点位置进行控制了,但这个浮点型的值保存到数据库里面还是小数点后四位,FieldKink类型是fkData,用TDBEdit进行输入,在运算的时候还是四位,这样就造成了在DBGridEH显示合计时有了误差。
因为用户设定了只显示小数点后两位,程序上已经显示了两位,但在DBGridEH合计时还是用数据库中的值进行合计的,结果就造成了合计出来的值和上面行数加起来的值有了误差。这个问题需要怎么解决啊

解决方案 »

  1.   

    1.delphi中:    begin
          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 
      

  2.   

    数据库里面用的是numeric(24,8)。但是fkData这个类型在保存的时候好象就只保留四位的,如果我要保留六位小数也是保存不到的
      

  3.   

    在数据库里也存成2位。。
    uses math;
    1.RoundTo(value,   -2);
    2.StrToFloat(FormatFloat( '0.00 ',   value));
      

  4.   

    1、数据库中建议使用decimal字段;
    2、浮点数的运算最好用SQL;
    3、如必须使用objectpascal计算,在使用Roundto函数时不会按中国习惯进行四舍五入时,需要自己设计函数计算。
      

  5.   

    不是的,現在是在程序上發現保存的小數點位數還是4位,DisplayFormat和EditFormat這兩個我已經設置成兩位的了
      

  6.   

    Value DescriptionfkData Field represents a physical field in a database table
    你用的应该是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;
      

  7.   

    要保留n位小数,公式为:trunc(原数乘以10×n+0.5)/10×n
      

  8.   

    我现在就是在程序运行的时候, 我已经把这个数字字段的DisplayFormat和EditFormat都改成两位了,但是D在输入值后还是保存为四位,这要怎么控制呢
      

  9.   

    最直接的,就是用SQL来计算。
      

  10.   

    把你往数据库里存数据的代码贴出来,都告诉你了,Delphi中,AsFloat后就不是精确的浮点数字了