程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 在業務系統處理小數精度, 四捨五入,全捨棄,全進位的方法

在業務系統處理小數精度, 四捨五入,全捨棄,全進位的方法

編輯:關於SqlServer
在業務系統中,不同的客戶對小數的處理有不同的方法

通過在設置保留的小數位數,以及小數位數以後的尾數的處理方法,可以靈活的滿足客戶要求

處理方法表

ID NUMBER(1) , --設置ID

AMOUNTDOT NUMBER(4,2) DEFAULT 0.01, --金額精確度 1: 精確到元 0.1:精確到角 0.01:精確到分ROUNDING NUMBER(1) , --捨入分界 -- 9: 全捨 0: 全入 4:四捨5入

建立Oracle函數,傳入設置ID,傳入金額,返回處理過的金額

存儲過程實現代碼如下

create or replace function Get_Real_Number ( --根據處理方法ID,取得處理後的金額-計算的金額
ID IN NUMBER, -- 處理方法ID
n_Amount IN NUMBER)
-----------------------------------------------------------------------
-- 用 途 自定義數據精度處理。
-- 創建者 :Andrew
-----------------------------------------------------------------------
-- 修改記錄列表:(按日期的先後順序逆序排列)
-- 修改時間 修改人 實現的功能說明
-- 9 全捨 0 全入 4四捨5入
-----------------------------------------------------------------------
return NUMBER-- 返回的金額
IS
v_amountdot VARCHAR2(5); --小數位數字符
v_keep NUMBER ; --保留的小數位數
v_rounding NUMBER ; --捨入分界
v_Amount NUMBER:=0 ; --返回的金額
BEGIN

SELECT amountdot, nvl(rounding,0) INTO v_amountdot,v_rounding FROM 處理方法表
WHERE id = SALE_PLACE_ID;
v_keep := Length(v_amountdot) - instr(v_amountdot,'.') ; --要保留的小數位數
IF v_rounding = 9 THEN --處理全捨棄
v_Amount := trunc(n_Amount,v_keep);
END IF;

IF v_rounding = 4 THEN --處理四捨五入
v_Amount := round(n_Amount,v_keep);
END IF;

IF v_rounding = 0 THEN --處理全進位
v_Amount := trunc(n_Amount,v_keep); --小數為數剛好等於要求保留的數
IF v_Amount <> n_Amount THEN --如果截取後的數與原來的數字不同,進1
v_Amount := v_Amount + to_number(v_amountdot);
END IF;

RETURN v_Amount;


exception
when OTHERS then RETURN n_Amount; &nbs


您正在看的SQLserver教程是:在業務系統處理小數精度, 四捨五入,全捨棄,全進位的方法。p;

END Get_Real_Number;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved