菜鸟发现delphi7货币型计算的 一个BUG,很有成就感啊!!(200分)

  • 主题发起人 主题发起人 wanglong0
  • 开始时间 开始时间
W

wanglong0

Unregistered / Unconfirmed
GUEST, unregistred user!
按理说,下面2个结算结果应该是一致的,但是却不是:

procedure TForm1.Button1Click(Sender: TObject);
var
cc: currency;
cc2:currency;
begin

cc2 := 5.85;

cc := strtocurr(Format('%.1f', [cc2]));

edit1.text := Format('%.2f', [cc]);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
cc: currency;
begin

cc := strtocurr(Format('%.1f', [5.85]));

edit1.text := Format('%.2f', [cc]);

end;
 
浮点数存在着精度问题,最后一位不能保证与代码中的十进制数字相同,而货币类型与普
通的浮点数又是不相同的两种浮点类型,正常。
 
看来不是货币型有这个问题,real也是啊
procedure TForm1.Button1Click(Sender: TObject);
var
cc: real;
cc2:real;
begin

cc2 := 5.85;

cc := strtocurr(Format('%.1f', [cc2]));

edit1.text := Format('%.2f', [cc]);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
cc: real;
begin

cc := strtocurr(Format('%.1f', [5.85]));

edit1.text := Format('%.2f', [cc]);

end;
 
只是 四舍五入,银行家算法。。你试下用 5.75 测试。

有乜成就感啊,都老问题了。。不是delphi的BUG,其它语言一个样。。
 
cc:=round(cc2*10)/10;
 
后退
顶部