全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1757
推到 Plurk!
推到 Facebook!

該如何判斷與VB函數"Clng"相同的資料格式

答題得分者是:st33chen
rany
一般會員


發表:15
回覆:26
積分:8
註冊:2007-05-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-09 17:37:10 IP:220.132.xxx.xxx 訂閱
以下是VB的原始code的寫法,因為clng的函數特性是會將它轉換成最接近的偶數值。例如,0.5 轉換成 0,1.5 轉換成 2。
不知Delphi裡是否有類似的函數呢?
又或是請各位大大幫我看看我的程式該如何修改?謝謝大家!!



Sub Insert_opd().....
EMRT_W = clng(odd("ODD_EMRT"))
IF odd("XFE_MTRM") = "RA" THEN
IF odd("ODD_PKND") = "N" THEN
EMRT_W = EMRT_W - clng(odd("XFE_MLTN"))
ELSE
EMRT_W = EMRT_W - clng(odd("XFE_MLTL"))
END IF
END IF

Aj = round (clng(odd("ODD_PQTY")) * clng(odd("ODD_PONT")) * EMRT_W / 100)
END Sub
以下是我Delphi的程式部份,因為有函數進位問題所以我在程式部分寫在SQL直接計算
如果把Clng的部份改成"FLOOR"這個函數,但是如果遇到0.5則會轉換成0,遇到1.5則會轉換成1,與VB的Clng特性不一樣


SELECT OPDTODDF.*,
XFE_MTRM, XFE_MLTL, XFE_MLTN,
CASE
WHEN ODD_PKND = 'N' THEN
ROUND(ODD_PQTY * ODD_PONT * (ODD_EMRT - XFE_MLTN) / 100)
ELSE
ROUND(ODD_PQTY * ODD_PONT * (ODD_EMRT - XFE_MLTL) / 100)
END AS EMRT_RA,
ROUND(ODD_PQTY * ODD_PONT * ODD_EMRT / 100) AS EMRT_W
FROM OPDTODDF, OPDMXFEE
WHERE ODD_CODE = XFE_CODN
AND ODD_CECT = 'N'
IF Query.FieldByName('XFE_MTRM').AsString = 'RA' THEN
Aj :=Query.FieldByName('EMRT_RA').AsInteger
ELSE
Aj :=Query.FieldByName('EMRT_W').AsInteger;
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-10 01:47:22 IP:59.115.xxx.xxx 訂閱
以下內容錯誤,我自己刪除了
---------------------------
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-03-10 10:24:37, 註解 無‧
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-10 08:48:29 IP:122.116.xxx.xxx 未訂閱
您們好,

vb 的 clng function 我查到的結果是

把數字轉成長整數 (long) 型. 若帶有小數的話會做4捨5入

問題是, 當小數正好為 0.5 時, 他會看整數部份的值,
如果是 偶數, 捨位
如果是 奇數, 進位
(這效果看起來是 "4捨5入" 到 偶數)
注意, 是當小數部份正好為 0.5 時才是如此,
好像不是 clng 不管任何值都會"4捨5入" 到 偶數哦

參考一下



我在 D6 查到的 ROUND 是 :
If X is exactly halfway between two whole numbers, the result is always the even number. This method of rounding is often called "Banker's Rounding"


邏輯好像一樣, 可以直接用 delphi 的 round 看看
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-03-10 08:53:24, 註解 無‧
st33chen 重新編輯於 2009-03-10 08:59:38, 註解 無‧
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-10 10:23:11 IP:59.115.xxx.xxx 訂閱
哎呀,上次寫VB已經是8,9年前的事....一下子沒注意, 光看問題字面回答,這次丟臉了 ><"
如樓上st33chen的說明 , round 是可以達成的

===================引 用 小傑克 文 章===================
你是不是走火入魔了.....
這個可以回歸簡單的算術解決....別想太多
Y := Round( X / 2) * 2 ;
------
額有朝天骨,眼中有靈光
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-10 10:48:36 IP:122.116.xxx.xxx 未訂閱
哈哈, 我也常常看到題目字面就回答了, 如果算丟臉的話, 那我丟臉的次數可多著呢.
大家加油.

尤其是中華棒球隊, 下一回絶對不可再丟臉了 .

===================引 用 小傑克 文 章===================
哎呀,上次寫VB已經是8,9年前的事....一下子沒注意, 光看問題字面回答,這次丟臉了 ><"
如樓上st33chen的說明 , round 是可以達成的

===================引 用 小傑克 文 章===================
你是不是走火入魔了.....
這個可以回歸簡單的算術解決....別想太多
Y := Round( X / 2) * 2 ;
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
rany
一般會員


發表:15
回覆:26
積分:8
註冊:2007-05-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-17 17:27:21 IP:220.132.xxx.xxx 訂閱
在此先謝謝兩位大大....

用round在SQL及程式判斷都嘗試了,不過run出來的值還是有差異
不過還沒時間去仔細對照每筆差異的問題
系統時間:2024-05-15 7:50:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!