mysql中小数点进位_在业务系统中处理小数精度, 四舍五入,全舍弃,全进位的方法-数据库专栏,SQL Server...

该博客介绍了如何在Oracle数据库中创建一个自定义函数,根据客户的需求处理金额的精度和舍入方式。函数根据设置的保留小数位数和舍入规则(全舍、全入、四舍五入),灵活地返回处理后的金额。代码示例展示了如何从处理方法表中获取参数并应用相应的计算逻辑。
摘要由CSDN通过智能技术生成

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

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

处理方法表

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;

end get_real_number;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值