返回人民币大写方式(num2rmb)
CREATE OR REPLACE FUNCTION num2rmb(Pi_MONEY NVARCHAR2) RETURN NVARCHAR2 IS
-- PURPOSE :返回人民币大写方式
v_NUM NUMBER;
I NUMBER;
J NUMBER;
K NUMBER;
L NUMBER;
FS1 NVARCHAR2(500);
FS2 NVARCHAR2(500);
FS3 NVARCHAR2(500);
S NVARCHAR2(500);
S1 NVARCHAR2(500);
S2 NVARCHAR2(500);
ZERO NUMBER;
POS NUMBER;
H NUMBER;
T NUMBER(5,4);
v_money NUMBER;
BEGIN
v_money := round(Pi_MONEY,2);
IF NVL(v_money,0)=0
OR INSTR(v_money,'.')>=18 THEN
RETURN '无';
END IF;
ZERO :=0;
POS :=0;
FS1 :='零壹贰叁肆伍陆柒捌玖';
FS2 :='仟佰拾万仟佰拾元';
FS3 :='仟佰拾万仟佰拾亿';
H := TRUNC(v_money);---整数部分
T := v_money - H;---小数部分
IF T =0 THEN
---形成字符串
S := LPAD(TO_CHAR(H),16,'')||'.0000';
ELSE
S := LPAD(TO_CHAR(H),16,'')|| RPAD(TO_CHAR(T),5,'');
END IF;
S1 := SUBSTR(S,1,8)||'.';
--整理亿位数字
FOR I IN 1..8 LOOP
IF I >= POS THEN
---else skip 0
L := TO_NUMBER(SUBSTR(S1, I,1));
IF L >0 THEN
--add fs1 and fs2 char
S2 := S2 || SUBSTR(FS1, L +1,1)|| SUBSTR(FS3, I,1);
ZERO :=1;--有整数
ELSE
IF I =4 THEN
S2 := S2 ||'万';
END IF;---插入万字,因为从此出分隔一次循环
POS := I +1;
FOR J IN I +1..9 LOOP
IF J =4
AND SUBSTR(S1, J,1)=''
AND S2 IS NOT NULL
AND ZERO =1 THEN
S2 := S2 ||'万';
END IF;
IF SUBSTR(S1, J,1)='' THEN
POS := POS +1;
END IF;
EXIT WHEN SUBSTR(S1, J,1)!='';--POS >=9;
END LOOP;
IF POS =9
AND SUBSTR(S1,1,8)>=1 THEN
S2 := S2 ||'亿';--无个亿位,直接加亿
ELSE
IF ZERO =1 THEN
S2 := S2 ||'零';
END IF;--不到个亿位,补中间零 eg 10101
END IF;
END IF;
END IF;
END LOOP;
ZERO :=0;
POS :=0;
--整理亿位之后的数据
S1 := SUBSTR(S,9);
FOR I IN 1..8 LOOP
IF I =1
AND TO_NUMBER(SUBSTR(S1, I,1))=0
AND S2 IS NOT NULL THEN
S2 := S2 ||'零';
END IF;
IF I >= POS THEN
---else skip 0
L := TO_NUMBER(SUBSTR(S1, I,1));
IF L >0 THEN
--add fs1 and fs2 char
S2 := S2 || SUBSTR(FS1, L +1,1)|| SUBSTR(FS2, I,1);
ZERO :=1;--有整数
ELSE
IF I =4 THEN
S2 := S2 ||'万';
END IF;---插入万字,因为从此出分隔一次循环
POS := I +1;
FOR J IN I +1..9 LOOP
IF J =4
AND SUBSTR(S1, J,1)=''
AND S2 IS NOT NULL
AND ZERO =1 THEN
S2 := S2 ||'万';
END IF;
IF SUBSTR(S1, J,1)='' THEN
POS := POS +1;
END IF;
EXIT WHEN SUBSTR(S1, J,1)!='';
END LOOP;
IF POS =9
AND v_money >=1 THEN
S2 := S2 ||'元';--无个位,直接加元
ELSE
IF ZERO =1 THEN
S2 := S2 ||'零';
END IF;--不到个位,补中间零 eg 10101.00
END IF;
END IF;
END IF;
END LOOP;
IF SUBSTR(S1,10,4)='' THEN
S2 := S2 ||'整';
ELSE
L := TO_NUMBER(SUBSTR(S1,10,1));
IF L >0 THEN
S2 := S2 || SUBSTR(FS1, L *1+1,1)||'角';
ELSE
IF v_money >0.1 THEN
S2 := S2 ||'零';
END IF;--去掉0.01的前导零
END IF;
L := TO_NUMBER(SUBSTR(S1,11,1));
IF L >0 THEN
S2 := S2 || SUBSTR(FS1, L *1+1,1)||'分';
END IF;
END IF;
RETURN S2;
END num2rmb;
返回人民币大写方式(num2rmb)的更多相关文章
- java 将一个正整数翻译成人民币大写的读法
程序如下: import java.lang.StringBuffer; /** 给定一个浮点数,将其装换成人民币大写的读法 88.5:捌十捌元零伍角 */ public class Num2Rmb ...
- python实现人民币大写转换
问题描述: 银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序. 在中文大写方式中,0到10以及100.1000.10000被依次表示为: 零 壹 贰 ...
- FastReport调用Delphi中的人民币大写转换自定义函数
FastReport调用Delphi中的人民币大写转换自定义函数 FastReport调用Delphi中的人民币大写转换自定义函数 function TJzpzEdit1.MoneyCn(mmje ...
- sql 数字转人民币大写函数(两种方法)
,)) returns @rmb table( 亿 ) ,仟万 ) ,佰万 ) ,拾万 ) ,万 ) ,仟 ) ,佰 ) ,拾 ) ,元 ) ,角 ) ,分 )) as begin insert in ...
- 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展
<Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...
- [转]WinExec、ShellExecute和CreateProcess及返回值判断方式
[转]WinExec.ShellExecute和CreateProcess及返回值判断方式 http://www.cnblogs.com/ziwuge/archive/2012/03/12/23924 ...
- Java实现人民币大写精讲
想要实现人民币大写,在发票等场景中使用?? 1234.56显示为:壹仟贰佰叁拾肆元伍角陆分,那就往下看看吧! 本程序可以实现 0 到 9999 9999 9999.994 以内的人民币大写转换,精确到 ...
- ORACLE数字转换人民币大写
ORACLE 数字转换人民币大写 示例. 数字 :183066999230.68 人民币大写 :壹仟捌佰参拾亿陆仟陆佰玖拾玖万玖仟贰佰参 ...
- Java实现人民币大写代码解析
想要实现人民币大写,在发票等场景中使用?? 1234.56显示为:壹仟贰佰叁拾肆元伍角陆分,那就往下看看吧! 本程序可以实现 0 到 9999 9999 9999.994 以内的人民币大写转换,精确到 ...
随机推荐
- APUE中fcntl.h的使用及O_SYNC在Mac与Ubuntu下的测试
此部分测试涉及到APUE V3中,第三章的图3-12到图3-14. 通过fcntl.h提供的功能,修改fd的文件属性,本处增加O_SYNC功能,并测试其效果. 本文涉及代码: tree ch3 ch3 ...
- struts debug 标签
< s:debug> 引起下面的错误 org.apache.jasper.JasperException: Caught an exception while getting the pr ...
- Android-AndroidStudio-添加依赖
Android Studio 添加依赖,没有 Eclipse 那么简单, EC 只需要把 jar 复制到 libs 下,然后添加进去,不行就再项目的属性那里勾选一下,就可以了. Android 提供以 ...
- Java关键字:static
通常,当创建类时,就是在描述那个类的外观和行为.只有用new创建类的对象时,才分配数据存储空间,方法才能被调用.但往往我们会有下面两种需求: 1.我想要这样一个存储空间:不管创建多少对象,无论是不创建 ...
- SqlService过期的解决方案
看图吧,不喜欢说话,图里面我都打备注了 0SQLService异常 1找到安装中心 2升级版本 3监测ing 4输入升级key 5同意并下一步 6下一步 7下一步 8下一步 9收工 10可以打开了
- 开源Word读写组件DocX 的深入研究和问题总结
一. 前言 前两天看到了asxinyu大神的[原创]开源Word读写组件DocX介绍与入门,正好我也有类似的自动生成word文档得需求,于是便仔细的研究了这个DocX. 我也把它融入到我的项目当中并进 ...
- 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法
有一个单链表,提供了头指针和一个结点指针,设计一个函数,在 O(1)时间内删除该结点指针指向的结点. 众所周知,链表无法随机存储,只能从头到尾去遍历整个链表,遇到目标节点之后删除之,这是最常规的思路和 ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- JavaScript实现图片轮播组件
效果: 自动循环播放图片,下方有按钮可以切换到对应图片. 添加一个动画来实现图片切换. 鼠标停在图片上时,轮播停止,出现左右两个箭头,点击可以切换图片. 鼠标移开图片区域时,从当前位置继续轮播. 提供 ...
- TFS 2013 培训视频
最近给某企业培训了完整的 TFS 2013 系列课程,一共四天. 下面是该课程的内容安排: 项目管理 建立项目 成员的维护 Backlog 定义 任务拆分 迭代 ...