關於round() |
答題得分者是:GrandRURU
|
ycl2005
一般會員 發表:15 回覆:14 積分:5 註冊:2005-10-01 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
請參閱:
http://delphi.ktop.com.tw/board.php?cid=30&fid=69&tid=21876 或 【delphi】Round函数四舍六入五留双 - [Delphi技术] 作者:佚名 来源:网络 -------------------------------------------------------------------------------- Round(所在单元:Math) 功能说明:对一个实数进行四舍五入。(按照银行家算法) 参考实例: var I, j: Integer; begin i := Round(1.5); // i等于2 j := Round(2.5); // j等于2 end; 在Delphi中使用Round函数得到的答案有时与我们所预期的会不太一样: 采用的是四舍六入五留双。即当舍或入位大于或小于五时按四舍五入来处理,而当舍或入位等于五时,就要看前 面一位是什么,根据奇进偶不进,它总是返回一个偶数值。 示例 结果 i:= Round(11.5) 12 i:= Round(10.5) 10 这种Round其实是按照银行家算法,统计学上一般都用这种算法,比传统的"四舍五入"要科学。 如果要使用传统的"四舍五入"方法,可以使用下面函数: function RoundClassic(R: Real) [code delphi] function RoundClassic(R: Real): Int64; begin Result:= Trunc(R); if Frac(R) >= 0.5 then Result := Result 1; end; [/code] - ⊕本文来自: 藤县综合网 http://www.txzhw.com/Html/Delphi/20080118/News_15789.html ===================引 用 ycl2005 文 章=================== 環境: Windows XP delphi 7 Enterprise a:integer; b:double; c:integer; a:=15; b:=28.9; c:=round(a*b) // 不曉得為什麼答案是433 //a*b=433.5 照理說應該 round(433.5) 應該等於434 c:=round(433.5) // 答案等於434 請問為什麼 round(a*b) 的答案是433 而不是434 ? |
ycl2005
一般會員 發表:15 回覆:14 積分:5 註冊:2005-10-01 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
因為DOUBLE得到的真值是:433.499999999999
所以,就不會是你想要的結果 不過,繞一下還是能得到正確的結果 [code delphi] procedure TForm1.Button1Click(Sender: TObject); var a:integer; b, c:Double; d:integer; begin a:=15; b:=28.9; c:=a*b; // 不曉得為什麼答案是433 //a*b=433.5 照理說應該 round(433.5) 應該等於434 d:=round(c); // 答案等於434 Caption := IntToStr(a) ',' FloatToStr(b) ',' FloatToStr(c) ',' IntToStr(d); end; [/code] ===================引 用 ycl2005 文 章=================== 謝謝回答, 我問題的重點是 round(433.5) // 答案是434, 因是是四捨六入五成雙, 奇數進位, 偶數捨去. 這問我知道, 問題是 round(a*b) // 為什麼答案是433, a*b=433.5 啊, 出來的答案為什麼不是434 ?
編輯記錄
GrandRURU 重新編輯於 2011-05-08 21:48:10, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |