在业务系统中处理小数精度,四舍五入,全舍弃,全进位的方法

文章作者 100test 发表时间 2008:02:01 15:49:36
来源 100Test.Com百考试题网


在业务系统中,不同的客户对小数的处理有不同的方法

通过在设置保留的小数位数,以及小数位数以后的尾数的处理方法,可以灵活的满足客户要求

处理方法表

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

0select 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.

end get_real_number.



相关文章


网络技术常用术语汉语对照
信息管理章节要点汇总
保护SQLServer的十个步骤
SQLServer端口更改后的数据库连接方式
在业务系统中处理小数精度,四舍五入,全舍弃,全进位的方法
计算机等级考试一级永中Office考试练习题
计算机等级考试四级网络工程师考试-大纲(08年版)
报考指南:计算机等级考试说明书要点
使用weblogic配置oracle的方法
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛