取小數的奇異現象 |
答題得分者是:speedup
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
看了本站上有很多人討論 float 取小數的與四捨五入的問題
一般如果要取整數則用
d1:=234.5 trunc(d1 0.5),不能用 round或 roundto 等程式 但我如果要取小數一位,或二位該如何做呢? 我試著用如下的語法 d2:=StrtoFloat(FormatFloat('#.0',d1)); 但我發現一個奇怪的現像 當 d1:=234.15 時 d2 會等於 234.2 d1:=234.25 時 d2 會等於 234.3 d1:=234.35 時 d2 會等於 234.3 d1:=234.55 時 d2 會等於 234.5 不知為何會有這種不規則的情形,不知各位大大有人知道嗎? 或有其他解法如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福 Thomas Chiou
------
Thomas Chiou |
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi thomas0728, 請參考以下討論: http://delphi.ktop.com.tw/topic.php?topic_id=21876 ----------------------------------
小弟才疏學淺,若有謬誤尚請不吝指教
----------------------------------
------
Fishman |
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
引言:如果你取的小數不會超過4位d2建議用Currency型態可避免數值誤差 接著你可採用位移方式來達到小數一位的目的d1:=234.5 trunc(d1 0.5),不能用 round或 roundto 等程式 但我如果要取小數一位,或二位該如何做呢? var d2,X : currency; begin d1:=234.15; X := 10;//到小數一位X為10,兩位X為20,餘依此類推 d2 := trunc(d1 * X 0.5) /X; end;混心雜欲 棄修身~唉
------
唉~ |
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |