線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2125
推到 Plurk!
推到 Facebook!

四拾五入問題Access VS MS SQL 請教?

尚未結案
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-28 11:07:11 IP:61.218.xxx.xxx 未訂閱
請教各位前輩 四拾五入問題Access VS MS SQL 請教? 公司舊系統是用Access開發的(程式VBA),資料庫為MS SQL 2000 最新因速度問題 成本系統改用 Delphi 開發 在計算進貨金額時因 Round()這函數之算法不用造成月總金額不同問題 在Access中是分奇偶數不同算法 Round(2.5) = 2 Round(3.5) = 4 但在 MS SQL T-SQL中是一律四拾五入 Round(2.5) = 3 Round(3.5) = 4 所以月總金額會差個1~2元 目前又因 Access中程式全都是這樣做,所以要去修改工程太大了 只好在新程式中修改, 在 T-SQL 中改 有自自寫Function 嗎,會不會速度變慢??還是有更好的方去 不知是否有更好的方法 再次感謝各位前輩 ^_^
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-29 14:32:56 IP:203.95.xxx.xxx 未訂閱
Hi, 測試了一下, access 的 round 函數看起來也和 delphi 的 4捨 6入 5成雙相同, 若是要在 access 達到4捨5入, 建議改用 format 函數, 如, select round(2.5), round(3.5), format(2.5, "#")*1, format(3.5, "#")*1 會出現 2, 4, 3, 4, 使用 format 到個位數即可順利取出4捨5入的值, 但是回傳為字串, 再配合 *1 後, 即順利轉型為整數!!
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-29 14:46:03 IP:61.218.xxx.xxx 未訂閱
引言: Hi, 測試了一下, access 的 round 函數看起來也和 delphi 的 4捨 6入 5成雙相同, 若是要在 access 達到4捨5入, 建議改用 format 函數, 如, select round(2.5), round(3.5), format(2.5, "#")*1, format(3.5, "#")*1 會出現 2, 4, 3, 4, 使用 format 到個位數即可順利取出4捨5入的值, 但是回傳為字串, 再配合 *1 後, 即順利轉型為整數!!
謝謝前輩回覆 但目前 Access 太多程式了,要改是個大工程 所以想在 T-SQL 做 如同 Access 的 Round()算法 想自己寫一個Function ,不知是否有較好的寫法,不知會不會效率變差? 再次感謝各位前輩 ^_^
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-29 15:49:29 IP:203.95.xxx.xxx 未訂閱
若只是整數的話, 弟寫個簡單的 udf 給你參考,    
CREATE FUNCTION [dbo].[myround] (@val float)  
RETURNS INT
AS  
BEGIN 
        declare @r int
        set @r = round(@val, 0)
        IF (@r - @val = 0.5)
                set @r=@r-1
        Return(@r)
END
使用方式如下, 原來是 select pid, price from sales 改為 select pid, dbo.myround(price) as price from sales 這樣即可, 若是有不同的位數, 得再改改才行, 你先試試! 至於效能的部分, 使用 udf 當然會比較慢一點, 但為了能達到你要的功能, 不得不犠牲這個部分!
vinchenkimo
一般會員


發表:0
回覆:37
積分:17
註冊:2004-03-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-29 18:35:10 IP:140.112.xxx.xxx 未訂閱
之前有著過delphi 四捨六入五成雙的道,之後都不大敢用 round 函數 都是直接 0.5 取整數,剛剛試過msacess 可以用 SELECT int(4.5 0.5) AS Expr1 僅供參考. 不過 ms sql 好像沒有 int 函數
系統時間:2024-06-02 2:37:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!