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)的更多相关文章

  1. java 将一个正整数翻译成人民币大写的读法

    程序如下: import java.lang.StringBuffer; /** 给定一个浮点数,将其装换成人民币大写的读法 88.5:捌十捌元零伍角 */ public class Num2Rmb ...

  2. python实现人民币大写转换

    问题描述: 银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序. 在中文大写方式中,0到10以及100.1000.10000被依次表示为: 零 壹 贰 ...

  3. FastReport调用Delphi中的人民币大写转换自定义函数

    FastReport调用Delphi中的人民币大写转换自定义函数   FastReport调用Delphi中的人民币大写转换自定义函数 function TJzpzEdit1.MoneyCn(mmje ...

  4. sql 数字转人民币大写函数(两种方法)

    ,)) returns @rmb table( 亿 ) ,仟万 ) ,佰万 ) ,拾万 ) ,万 ) ,仟 ) ,佰 ) ,拾 ) ,元 ) ,角 ) ,分 )) as begin insert in ...

  5. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  6. [转]WinExec、ShellExecute和CreateProcess及返回值判断方式

    [转]WinExec.ShellExecute和CreateProcess及返回值判断方式 http://www.cnblogs.com/ziwuge/archive/2012/03/12/23924 ...

  7. Java实现人民币大写精讲

    想要实现人民币大写,在发票等场景中使用?? 1234.56显示为:壹仟贰佰叁拾肆元伍角陆分,那就往下看看吧! 本程序可以实现 0 到 9999 9999 9999.994 以内的人民币大写转换,精确到 ...

  8. ORACLE数字转换人民币大写

    ORACLE 数字转换人民币大写     示例.   数字                    :183066999230.68 人民币大写        :壹仟捌佰参拾亿陆仟陆佰玖拾玖万玖仟贰佰参 ...

  9. Java实现人民币大写代码解析

    想要实现人民币大写,在发票等场景中使用?? 1234.56显示为:壹仟贰佰叁拾肆元伍角陆分,那就往下看看吧! 本程序可以实现 0 到 9999 9999 9999.994 以内的人民币大写转换,精确到 ...

随机推荐

  1. TODO:Go语言同名Go字体发布

    TODO:Go语言同名Go字体发布 2016-11-16 Go语言官方博客发布了一款同名字体–Go字体.此字体族包括正常.粗体和斜体渲染,支持比例和等宽字体.此字体已经经过用于编程方面的技术测试,使用 ...

  2. ASP.NET MVC中利用AuthorizeAttribute实现访问身份是否合法以及Cookie过期问题的处理

    话说来到上海已经快半年了,时光如白驹过隙,稍微不注意,时间就溜走了,倒是没有那么忙碌,闲暇之际来博客园还是比较多的,记得上次在逛博问的时候看到有同志在问MVC中Cookie过期后如何作相关处理,他在阐 ...

  3. GitHub实战系列~1.环境部署+创建第一个文件 2015-12-9

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  4. <JavaScript语言精粹>-读书笔记(一)

    用object.hasOwnProperty(variable)来确定这个属性名是否为该对象成员,还是来自于原型链. for(my in obj){ if(obj.hasOwnProperty(my) ...

  5. 【解决方案】 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userHandler': Injection of resource dependencies failed;

    一个错误会浪费好多青春绳命 鉴于此,为了不让大家也走弯路,分享解决方案. [错误代码提示] StandardWrapper.Throwableorg.springframework.beans.fac ...

  6. Cesium原理篇:Material

    Shader 首先,在本文开始前,我们先普及一下材质的概念,这里推荐材质,普及材质的内容都是截取自该网站,我觉得他写的已经够好了.在开始普及概念前,推荐一首我此刻想到的歌<光---陈粒>. ...

  7. HTML5-video标签-实现点击预览图播放或暂停视频

    HTML5-video标签-实现点击预览图播放或暂停视频 刚刚参加工作,开始更多的接触到一些新的知识,促使我开始了解html5和css3的新特性.这时我才真的发现到html5和css3的强大. 之前关 ...

  8. 11.JAVA之GUI编程菜单

    功能:添加菜单组件 知识总结: 代码如下: import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Menu; impor ...

  9. ASP.NET Core 中文文档 第二章 指南(8) 使用 dotnet watch 开发 ASP.NET Core 应用程序

    原文:Developing ASP.NET Core applications using dotnet watch 作者:Victor Hurdugaci 翻译:谢炀(Kiler) 校对:刘怡(Al ...

  10. H5实现本地预览图片

    我们使用H5可以很容易的实现图片上传前对其进行预览的功能 Html代码如下: <!DOCTYPE html> <html lang="en"> <he ...