procedure TForm1.Button1Click(Sender: TObject);
var
 aaa:double;
 bbb:double;
begin
 aaa:=202.2;
 bbb:=200;
 ShowMessage(FloatToStr(aaa-bbb));
end;打印出来的答案竟然是2.1999999999999999999999而不是2.2
如果将aaa换成212.2,答案则是10.2,而不是10.19999999999999999999,也就是说aaa-bbb>=10或<=-10时则又是精确计算出来。
我现在在做一工资管理程序,有时莫名其妙得出这样的答案,气死我也。
而在C++Builder也一样存在这个问题.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 double aaa=202.2;
 double bbb=200;
 ShowMessage(FloatToStr(aaa-bbb));
}但是MS VC编译器则是这样的结果:
void CaaaDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString str1;
double aaa=202.2;
double bbb=200;
str1.Format("%lf",aaa-bbb);
MessageBox(str1);
}
得出2.200000,也多了5个0,但还好,没误差

解决方案 »

  1.   

    http://211.152.144.38/woodstock/SMC.rar
    今天新版本,请使用!
    bug正在改,但这些天已改改了很多了!
      

  2.   

    使用FloatToStr 或者FloatToText控制显示格式。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————