返回人民币大写方式(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 以内的人民币大写转换,精确到 ...
随机推荐
- JVM系列-常用参数
1.堆内存 堆内存用于存储new对象,垃圾回收器负责堆内存的管理.但Java程序实际占用的空间则由堆内存.栈内存(程序运行栈).程序计数器.常量区.代码区.本地内存等. 堆内存分为Young和Old, ...
- ceph架构剖析
unitedstack有云 :https://www.ustack.com/blog/ceph_infra/
- Android开发学习之路-机器学习库(图像识别)、百度翻译
对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色
系列目录 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展开SysRole模块添加一个操作码,并赋予权限 设置好之后将权限授权给管理员,在SysRole的index添加操作码与js ...
- Core Java 总结(数据类型,表达式问题)
2016-10-18 整理 写一个程序判断整数的奇偶 public static boolean isOdd(int i){ return i % 2 == 1; } 百度百科定义:奇数(英文:odd ...
- 打造android偷懒神器———RecyclerView的万能适配器
转载请注明出处谢谢:http://www.cnblogs.com/liushilin/p/5720926.html 很不好意思让大家久等了,本来昨天就应该写这个的,无奈公司昨天任务比较紧,所以没能按时 ...
- 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using ...
- C#[Win32&WinCE&WM]应用程序只能运行一个实例:MutexHelper
前言 在开发应用程序时,通常只让程序运行一个实例.所以,就要判断程序是否已经运行. 下面是我自己在项目中使用到,封装好的帮助类.有 普通的 C# 应用程序 和 Windows CE 和 Windows ...
- window下使用Redis Cluster部署Redis集群
日常的项目很多时候都需要用到缓存.redis算是一个比较好的选择.一般情况下做一个主从就可以满足一些比较小的项目需要.在一些并发量比较大的项目可能就需要用到集群了,redis在Windows下做集群可 ...
- Devexpress GridControl.Export
private void mnuExportTable_ItemClick_1(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { u ...