今天接到客户投诉,说程式连简单金额都算错了!开始不信,后来客户将数据备份传过来,一看吓死人:
92*2.17=199.63
138*2.12=281.95
266*1.49=396.33
23*1.78=40.93
.....数据库里的确保存着以上结果,但现在重新用系统开单却又是正常,问题在哪里?与操作系统有否关系?

解决方案 »

  1.   

    Rubi(浪迹Csdn各个板块!Borland-MS-IBM-水区) :
    数据类型:数量(int),单价(decimal,9,18,4),金额:(decimal,9,18,4)注:结果有用Round及Power函数作两位数的四舍五入现在头痛的是,系统现在自已测试很正常,想找问题都找不到!!
    我也相信我的程序有问题,只不过想找出真正的原因!
      

  2.   

    在D与数据库(SQL SERVER2000)中均测试了,结果都是:
    92*2.17=199.6400;
    搞不清原因了。
    //直接测试数据项。
    var
      i,j:real;//--double类型也是一样的结果了。。
    begin
      i:=strtofloat(edit1.text);
      j:=strtofloat(edit2.text);
      memo1.lines.add(edit1.text+'*'+edit2.text+'='+floattostr(i*j));
    end;/。/----测试数据库读取。。
    var
      i,j:real;
    begin
      i:=ADODataSet1.Fields[1].AsCurrency;
      j:=ADODataSet1.Fields[2].AsCurrency;
      memo1.lines.add(edit1.text+'*'+edit2.text+'='+floattostr(i*j));
    end;
      

  3.   

    你不用round,要客户帮你测试下数据,看情况怎么样
      

  4.   

    数据类型:数量(int),单价(decimal,9,18,4),金额:(decimal,9,18,4)为什么放着好好的money类型不用?
      

  5.   

    对,用currency、money、float都可以。
      

  6.   

    遇到过一次,后来改成money类型就没问题了
      

  7.   

    改为currency或money类型不会有错的,delphi和任何一种商业化数据库不可能出现这样的错误.