400被DELPHI处理成为544.12.是不是DELPHI的BUG |
尚未結案
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
我用的是DELPHI7.
我程序的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
vdreal:real;
begin
vdreal:=0;
vdreal:=vdreal strtofloat(trim(edit1.text));
label1.Caption:=formatfloat('0.00',vdreal);
label2.Caption:=SmallToBig(vdreal);
end;
这是一个测试程序,FORM上有一个EDIT1用于输入数值,一个LABEL1用于保存转换后的结果.
在用户的机器上测试时,在EDIT1输入'400',结果在LABEL1显示出来的是'544.12',如果输入'400.01',显示'544.13',但是如果输入'123','654'都不会有问题.换另一台机器测试400,400.01,也没有问题.
是DELPHI的BUG还是操作系统的问题,比如设置不当或中毒了.大家帮我分析一下.
|
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
如果最快的作法是 重新安裝, 那就重新安裝, 而不是一定要找出問題才行 Windows 有一堆 Bug, 那是否要等微軟將 bug 除盡才開始用 Windows
Delphi 也有一堆 Bug, 那是否要等 Borland 將 bug 除盡才開始用 Delphi *********************
如果您滿意答案,請結案
*********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
重新安装系统我也试过,原来用户使用WIN2003,重装后是WINXP,但测试时发现错误一样出现.
据了解,用户机器的CPU是AMD Athlon(tm) XP 1700 ,开始怀疑是这种CPU浮点运算方面有BUG,但换到其他同样型号或类似型号的几台机器上却没有问题.
我们又怀疑是REAL类型的原因(这个类型好象是不推荐使用的),但换成DOUBLE,Extended,Comp都发生同样错误,但Currency却没错.
进一步测试发现,real,DOUBLE,Extended,Comp如果用FormatFloat,Format处理会出错,但如果我用下面的方法处理就不会:
function TForm1.iFormatFloat(vdreal:real):string;
var
vdtmp:int64;
vstmp: string;
begin
vdtmp := Trunc((vdreal 0.005)*100);
vsTmp := IntToStr(vdTmp);
vsTmp := Copy(vsTmp, 1, Length(vsTmp) - 2) '.' Copy(vsTmp, Length(vsTmp) - 1, 2);
result := vsTmp;
end;
并且如果是Currency类型,我们用的是formatcurr,而不是FormatFloat,所以我开始怀疑是不是FormatFloat的问题.但无法解释可能是什么原因.
另外说明一下:
不是所有数据都会出错,经测试只在289-432范围内,数值转换成字符串时都增加了144.115188075856.
如果您有兴趣,就来探讨一下,发表您的看法,谢谢!
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
to fangwy:
1.理論上,同一段程式碼,不可能有兩種執行結果.如果只有單一台電腦有問題,那應該可以把範圍縮小在該台電腦上.不管是硬體還是軟體有問題. 2.如果所作業系統重灌,問題仍然存在,那麼試著檢查一下硬體有沒有問題,執行其他有浮點運算的程式是否都正常(如果你一定要找到問題所在的話) 3.把你的source code,拿到另外一台電腦compiler試試.之前曾經發現,同樣的source code,不同的機器,compiler出來的執行檔不一樣... 4.個人建議:不要浪費時間在這個上面.說服user,就是那台電腦的問題,別台電腦都正常,讓user換一台電腦最快
引言: ??change.jian兄?我提供了一?很有用的信息, 但是?不能解???BUG,因?,一?始我就怀疑与系??置有?,??里要求用?查看系?的?域?置,并与我的系??置?照,?有??有不同之?,并且重?系?后再做??也出?,用??明在重?系?后只安?QQ以方便与我??通. |
fangwy
中階會員 發表:99 回覆:139 積分:62 註冊:2003-09-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |