zoukankan      html  css  js  c++  java
  • 返回人民币大写方式(num2rmb)

      1 CREATE OR REPLACE FUNCTION num2rmb(Pi_MONEY NVARCHAR2) RETURN NVARCHAR2 IS
      2 -- PURPOSE :返回人民币大写方式
      3 v_NUM NUMBER;
      4 I NUMBER;
      5 J NUMBER;
      6 K NUMBER;
      7 L NUMBER;
      8 FS1 NVARCHAR2(500);
      9 FS2 NVARCHAR2(500);
     10 FS3 NVARCHAR2(500);
     11 S NVARCHAR2(500);
     12 S1 NVARCHAR2(500);
     13 S2 NVARCHAR2(500);
     14 ZERO NUMBER;
     15 POS NUMBER;
     16 H NUMBER;
     17 T NUMBER(5,4);
     18 v_money NUMBER;
     19 BEGIN
     20 v_money := round(Pi_MONEY,2);
     21 IF NVL(v_money,0)=0
     22 OR INSTR(v_money,'.')>=18 THEN
     23 RETURN '';
     24 END IF;
     25 ZERO :=0;
     26 POS :=0;
     27 FS1 :='零壹贰叁肆伍陆柒捌玖';
     28 FS2 :='仟佰拾万仟佰拾元';
     29 FS3 :='仟佰拾万仟佰拾亿';
     30 H := TRUNC(v_money);---整数部分
     31 T := v_money - H;---小数部分
     32 IF T =0 THEN
     33 ---形成字符串
     34 S := LPAD(TO_CHAR(H),16,'0')||'.0000';
     35 ELSE
     36 S := LPAD(TO_CHAR(H),16,'0')|| RPAD(TO_CHAR(T),5,'0');
     37 END IF;
     38 S1 := SUBSTR(S,1,8)||'.';
     39 --整理亿位数字
     40 FOR I IN 1..8 LOOP
     41 IF I >= POS THEN
     42 ---else skip 0
     43 L := TO_NUMBER(SUBSTR(S1, I,1));
     44 IF L >0 THEN
     45 --add fs1 and fs2 char
     46 S2 := S2 || SUBSTR(FS1, L +1,1)|| SUBSTR(FS3, I,1);
     47 ZERO :=1;--有整数
     48 ELSE
     49 IF I =4 THEN
     50 S2 := S2 ||'';
     51 END IF;---插入万字,因为从此出分隔一次循环
     52 POS := I +1;
     53 FOR J IN I +1..9 LOOP
     54 IF J =4
     55 AND SUBSTR(S1, J,1)='0'
     56 AND S2 IS NOT NULL
     57 AND ZERO =1 THEN
     58 S2 := S2 ||'';
     59 END IF;
     60 IF SUBSTR(S1, J,1)='0' THEN
     61 POS := POS +1;
     62 END IF;
     63 EXIT WHEN SUBSTR(S1, J,1)!='0';--POS >=9;
     64 END LOOP;
     65 IF POS =9
     66 AND SUBSTR(S1,1,8)>=1 THEN
     67 S2 := S2 ||'亿';--无个亿位,直接加亿
     68 ELSE
     69 IF ZERO =1 THEN
     70 S2 := S2 ||'';
     71 END IF;--不到个亿位,补中间零 eg 10101
     72 END IF;
     73 END IF;
     74 END IF;
     75 END LOOP;
     76 ZERO :=0;
     77 POS :=0;
     78 --整理亿位之后的数据
     79 S1 := SUBSTR(S,9);
     80 FOR I IN 1..8 LOOP
     81 IF I =1
     82 AND TO_NUMBER(SUBSTR(S1, I,1))=0
     83 AND S2 IS NOT NULL THEN
     84 S2 := S2 ||'';
     85 END IF;
     86 IF I >= POS THEN
     87 ---else skip 0
     88 L := TO_NUMBER(SUBSTR(S1, I,1));
     89 IF L >0 THEN
     90 --add fs1 and fs2 char
     91 S2 := S2 || SUBSTR(FS1, L +1,1)|| SUBSTR(FS2, I,1);
     92 ZERO :=1;--有整数
     93 ELSE
     94 IF I =4 THEN
     95 S2 := S2 ||'';
     96 END IF;---插入万字,因为从此出分隔一次循环
     97 POS := I +1;
     98 FOR J IN I +1..9 LOOP
     99 IF J =4
    100 AND SUBSTR(S1, J,1)='0'
    101 AND S2 IS NOT NULL
    102 AND ZERO =1 THEN
    103 S2 := S2 ||'';
    104 END IF;
    105 IF SUBSTR(S1, J,1)='0' THEN
    106 POS := POS +1;
    107 END IF;
    108 EXIT WHEN SUBSTR(S1, J,1)!='0';
    109 END LOOP;
    110 IF POS =9
    111 AND v_money >=1 THEN
    112 S2 := S2 ||'';--无个位,直接加元
    113 ELSE
    114 IF ZERO =1 THEN
    115 S2 := S2 ||'';
    116 END IF;--不到个位,补中间零 eg 10101.00
    117 END IF;
    118 END IF;
    119 END IF;
    120 END LOOP;
    121 IF SUBSTR(S1,10,4)='0000' THEN
    122 S2 := S2 ||'';
    123 ELSE
    124 L := TO_NUMBER(SUBSTR(S1,10,1));
    125 IF L >0 THEN
    126 S2 := S2 || SUBSTR(FS1, L *1+1,1)||'';
    127 ELSE
    128 IF v_money >0.1 THEN
    129 S2 := S2 ||'';
    130 END IF;--去掉0.01的前导零
    131 END IF;
    132 L := TO_NUMBER(SUBSTR(S1,11,1));
    133 IF L >0 THEN
    134 S2 := S2 || SUBSTR(FS1, L *1+1,1)||'';
    135 END IF;
    136 END IF;
    137 RETURN S2;
    138 END num2rmb;
  • 相关阅读:
    form编码方式application/x-www-form-urlencoded和multipart/form-data的区别
    CentOS开启telnet服务
    借助英语搞清会计中“借”/“贷”的含义(转载)
    乘法器的Verilog HDL实现(转载)
    Meth | 关闭mac自带apache的启动
    Meth | Git冲突:commit your changes or stash them before you can merge. 解决办法
    Meth | Git 避免重复输入用户名和密码方法
    Meth | git Please move or remove them before you can merge
    Meth | git 常用命令
    Meth | 小团队git开发模式
  • 原文地址:https://www.cnblogs.com/mellowsmile/p/4425806.html
Copyright © 2011-2022 走看看