請問關於 formatfloat 的奇怪問題 |
答題得分者是:小傑克
|
larrytyan
一般會員 ![]() ![]() 發表:51 回覆:38 積分:17 註冊:2004-08-11 發送簡訊給我 |
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
larrytyan
一般會員 ![]() ![]() 發表:51 回覆:38 積分:17 註冊:2004-08-11 發送簡訊給我 |
Dear 版主.
我用四捨五入搜尋了好久, 之後看到有人說已經放棄 round 而改用 formatfloat, 我想問的是 FormatFloat('0',r1*r2) 和 FormatFloat('0',380*9.575) 結果為什麼會不同呢? 這也是四捨五入的問題嗎? 為什麼? ===================引 用 P.D. 文 章=================== 1.請先用四捨五入搜尋一下本站, 你就會發現答案了 2.你用 formatfloat('0'...)來取捨到整數, 本來就會有四捨五入的問題, 這那裡好奇怪的呢? |
zhouying82
高階會員 ![]() ![]() ![]() ![]() 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
[code delphi] [code delphi] procedure TForm1.Button1Click(Sender: TObject); var r1, r2 :real; begin r1 := 380; r2 := 9.575; ShowMessage(FormatFloat('0.000',r1*r2)); end; end. [/code] 你可以按照上面的方法进行更改,如果要四舍五入的话,就用ROUND函数 [/code]
------
断断续续的学了几年,还是一个初学者,永远支持Delphi ! |
larrytyan
一般會員 ![]() ![]() 發表:51 回覆:38 積分:17 註冊:2004-08-11 發送簡訊給我 |
Dear Sir.
1. ROUND 不合用, 因為它是四捨六入伍成雙 2. 我的小數點是不固定的,(從 0 到 8 位都有可能), 如果只要取整數, ShowMessage(FormatFloat('0',r1*r2)) 結果為 3638 這是不對的. 應該是 3639 ===================引 用 zhouying82 文 章=================== [code delphi] [code delphi] procedure TForm1.Button1Click(Sender: TObject); var r1, r2 :real; begin r1 := 380; r2 := 9.575; ShowMessage(FormatFloat('0.000',r1*r2)); end; end. [/code] 你可以按照上面的方法进行更改,如果要四舍五入的话,就用ROUND函数 [/code] |
st33chen
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
|
小傑克
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
為何會不同....理論上 real , double 是趨近值 當你寫 r1 := 9.575 時 r1 有可能是9.574999999999.... or 9.575000000...1
也許你會懷疑,你可以用 -380 * 9.575 去跑,你就會發現 system處理的方式 解決方法也很多,許多前輩都討論過, 也許你可以改用currency 或是自己寫function 處理 Fundamental real types Type Range Significant digits Size in bytes Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6 Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4 Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8 Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10 Comp -2^63 1 .. 2^63 -1 19-20 8 Currency -922337203685477.5808.. 922337203685477.5807 19-20 8 The generic type Real, in its current implementation, is equivalent to Double. Generic real types Type Range Significant digits Size in bytes Real 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8 ===================引 用 larrytyan 文 章=================== Dear 版主. 我用四捨五入搜尋了好久, 之後看到有人說已經放棄 round 而改用 formatfloat, 我想問的是 FormatFloat('0',r1*r2) 和 FormatFloat('0',380*9.575) 結果為什麼會不同呢? 這也是四捨五入的問題嗎? 為什麼?
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-04-15 15:25:13, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |