四拾五入問題Access VS MS SQL 請教? |
尚未結案
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
請教各位前輩 四拾五入問題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 發送簡訊給我 |
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
引言: 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 發送簡訊給我 |
若只是整數的話, 弟寫個簡單的 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |