奇狐社區論壇
在這個頁面顯示本主題全部的 3 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=25)
-- 奇狐 v5.2 Beta2版使用CEILING函數的疑問? (http://www.chiefox.com.tw/bbs/showthread.php?threadid=21229)


由 justdoit829 在 2018-01-08 21:04 發表:

奇狐 v5.2 Beta版使用CEILING函數的疑問?

在主圖使用下述計算,
NOW應該都是-4,
奇怪? 怎麼-4經過CEILING函數後被+1了?

NUM:=-20;
A:=0.25;
B:=0.8;
AB:MAX(1*A,1*B);

NOW:=NUM*(1-B);
EXPLAIN(1,'NOW1:'+NUMTOSTR(NOW,2));
NOW:=CEILING(NOW);
EXPLAIN(1,'NOW2:'+NUMTOSTR(NOW,2));

__________________
--
忘我無為無不為..


由 cgjj 在 2018-01-08 21:42 發表:

回覆: 奇狐 v5.2 Beta版使用CEILING函數的疑問?

引用:
最初由 justdoit829 發表
在主圖使用下述計算,
NOW應該都是-4,
奇怪? 怎麼-4經過CEILING函數後被+1了?

NUM:=-20;
A:=0.25;
B:=0.8;
AB:MAX(1*A,1*B);

NOW:=NUM*(1-B);
EXPLAIN(1,'NOW1:'+NUMTOSTR(NOW,2));
NOW:=CEILING(NOW);
EXPLAIN(1,'NOW2:'+NUMTOSTR(NOW,2));



跟 v5.2 Beta2版 無關啦,這是計算精度問題啦!!!

值 -4 實際,電腦實際儲存的可能為 -3.999999976
CEILING 是往大的方向取整數,所以會得到-3
FLOOR 是往小的方向取整數,其會得到-4

您把
EXPLAIN(1,'NOW1:'+NUMTOSTR(NOW,2));
改為
EXPLAIN(1,'NOW1:'+NUMTOSTR(NOW,8));
就可以見到了,我說的情況了

CEILING若要避開精度問題,這樣就可以處理:
NOW:=CEILING(NOW-0.000001);


由 justdoit829 在 2018-01-09 09:28 發表:

原來是這樣子.. 謝謝解惑^^

__________________
--
忘我無為無不為..


全部時間均為台灣時間, 現在時間為16:15
在這個頁面顯示本主題全部的 3 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.