Oracle:

--------------------------------------------------------

--  数字金额转大写

--------------------------------------------------------

create or replace FUNCTION MoneyToChinese(P_NUM IN NUMBER DEFAULT NULL)

RETURN NVARCHAR2 IS

RESULT      NVARCHAR2(100); --返回字符串

NUM_ROUND   NVARCHAR2(100) := TO_CHAR(ABS(ROUND(P_NUM, 2))); --转换数字为小数点后2位的字符(正数)

NUM_LEFT    NVARCHAR2(100); --小数点左边的数字

NUM_RIGHT   NVARCHAR2(2); --小数点右边的数字

STR1        NCHAR(10) := '零壹贰叁肆伍陆柒捌玖'; --数字大写

STR2        NCHAR(16) := '元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; --数字位数(从低至高)

NUM_PRE     NUMBER(1) := 1; --前一位上的数字

NUM_CURRENT NUMBER(1); --当前位上的数字

NUM_COUNT   NUMBER := 0; --当前数字位数

NUM1        NUMBER;

BEGIN

IF P_NUM IS NULL THEN

RETURN NULL;

END IF; --转换数字为null时返回null

SELECT TO_CHAR(NVL(SUBSTR(TO_CHAR(NUM_ROUND),

1,

DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),

0,

LENGTH(NUM_ROUND),

INSTR(TO_CHAR(NUM_ROUND), '.') - 1)),

0))

INTO NUM_LEFT

FROM DUAL; --取得小数点左边的数字

SELECT SUBSTR(TO_CHAR(NUM_ROUND),

DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),

0,

LENGTH(NUM_ROUND) + 1,

INSTR(TO_CHAR(NUM_ROUND), '.') + 1),

2)

INTO NUM_RIGHT

FROM DUAL; --取得小数点右边的数字

SELECT CASE

WHEN LENGTH(NUM_LEFT) >= 8 THEN

TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT), -8, 4))

ELSE

TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT),

-LENGTH(NUM_LEFT),

LENGTH(NUM_LEFT) - 4))

END

INTO NUM1

FROM DUAL; ---取得千、百、十、万位上的数字

IF LENGTH(NUM_LEFT) > 16 THEN

RETURN '**********';

END IF; --数字整数部分超过16位时

--采用从低至高的算法,先处理小数点右边的数字

IF LENGTH(NUM_RIGHT) = 2 THEN

IF TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) = 0 THEN

RESULT := '零' ||

SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';

ELSE

RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角' ||

SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';

END IF;

ELSIF LENGTH(NUM_RIGHT) = 1 THEN

RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角整';

ELSE

RESULT := '整';

END IF;

--再处理小数点左边的数字

FOR I IN REVERSE 1 .. LENGTH(NUM_LEFT) LOOP

--(从低至高)

NUM_COUNT   := NUM_COUNT + 1; --当前数字位数

NUM_CURRENT := TO_NUMBER(SUBSTR(NUM_LEFT, I, 1)); --当前位上的数字

IF NUM_CURRENT > 0 THEN

--当前位上数字不为0按正常处理

RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) ||

SUBSTR(STR2, NUM_COUNT, 1) || RESULT;

ELSE

--当前位上数字为0时

IF NUM_COUNT = 5 THEN

IF MOD(NUM_COUNT - 1, 4) = 0 AND NUM1 <> 0 THEN

RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;

NUM_PRE := 0; --元、万,亿前不准加零 --当前位是元、万或亿时

END IF;

ELSE

IF MOD(NUM_COUNT - 1, 4) = 0 THEN

RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;

NUM_PRE := 0; --元、万,亿前不准加零

END IF;

END IF;

IF NUM_PRE > 0 OR LENGTH(NUM_LEFT) = 1 THEN

--上一位数字不为0或只有个位时

RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) || RESULT;

END IF;

END IF;

NUM_PRE := NUM_CURRENT;

END LOOP;

IF P_NUM < 0 THEN

--转换数字是负数时

RESULT := '负' || RESULT;

END IF;

RETURN RESULT;

EXCEPTION

WHEN OTHERS THEN

RAISE_APPLICATION_ERROR(-20001, '数字转换大写出现错误!' || SQLERRM);

END;

将上面函数代码在数据库中执行,直接用函数即可完成转换。

Oracle数据库将数字金额转换为大写汉字相关推荐

  1. 数字金额转换为大写人民币汉字

    // 数字金额转换为大写人民币汉字convertCurrency (money) {// 汉字的数字var cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', ' ...

  2. JS将数字金额转换为大写人民币汉字

    转载自 qubernet 博客 JS将数字金额转换为大写人民币汉字 function convertCurrency(money) {//汉字的数字var cnNums = new Array('零' ...

  3. 【Java】将数字金额转换为大写中文金额

    package com.ruoyi.test;import org.apache.commons.lang3.StringUtils;/*** @Title: ConvertUpMoney* @Des ...

  4. js将数字金额转换为大写人民币

    今天换算律师打官司金额,用到了小写金额转化为大写汉字的问题,这里把具体思路分析一下 1.首先判断输入数值正负问题, 2.其次有小数点部分需要处理,将数值每次乘以10进行拆分,乘10--%10--结果为 ...

  5. JS实现将数字金额转换为大写人民币汉字

    function convertCurrency(money) {//汉字的数字var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒 ...

  6. oracle人民币转大写,Oracle 小写金额转换为大写

    在开发EBS的合同报表打印的时候需要将小写金额转换为大写. 如下是本人自己写的转换函数. 主要思路:先获取小数点位置,在区分整数与小数点处理,根据位数和数字组合读取金额. 最后再处理特殊显示部分. / ...

  7. java数字金额大写金额_Java实现 “ 将数字金额转为大写中文金额 ”

    前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. 奉上代码: /** * @Title: Conve ...

  8. Java将数字金额转为大写

    首先将数字金额定义为字符串类型,然后再转为int或double型:判断是否是负数或有小数点,再进行下一步处理. 代码如下: package com.study;import com.sun.deplo ...

  9. java 金额转中文_Java实现 将数字金额转为大写中文金额

    前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分. 代码: /** * @Title: ConvertUpMoney * @D ...

  10. Java实现 “ 将数字金额转为大写中文金额 ”

    最困难的事情就是认识自己! 个人博客,欢迎访问! 前言: 输入数字金额参数,运行程序得到其对应的大写中文金额:例如:输入 12.56,输出 12.56 : 壹拾贰元伍角陆分:重点来了:本人亲测有效. ...

最新文章

  1. 千万用户同时在线,优酷智能档在双11“猫晚”直播如何防卡顿?
  2. 五个项目管理学习笔记.沟通技巧II
  3. 3DSlicer7:FAQ-1
  4. 在diy的文件系统上创建文件的流程
  5. 百度SEO Rspod紫光网站模板建站之星
  6. poj 1125 Stockbroker Grapevine(Folyd)
  7. qpython3安装kivy_kivy学习之路:kivy开发环境架设--- windows篇
  8. python 无法定位程序输入点_系统提示无法定位程序输入点于动态链接库的解决方案【图文】-太平洋电脑网PConline-太平洋电脑网...
  9. DCGAN数据集:mnist、CelebA、lsun
  10. 餐厅座位表 canvas实现
  11. 【基本功】Java魔法类:Unsafe应用解析
  12. 孙溟㠭作品《静无尘》
  13. java如何处理tcp异常断开_针对TCP连接异常断开的分析
  14. 一文读懂Redis的四种模式,单机、主从、哨兵、集群(*)
  15. 搞定 psp2000 无线上网问题
  16. 防范IP地址攻击的有效方法
  17. 搭建MQTT服务器及客户端
  18. STM32 NUCLEO开发板通过Mini USB供电
  19. vscode无法运行和调试使用了部分stl库的程序
  20. Linux c网络编程聊天室项目

热门文章

  1. FPGA MF-TDMA SCPC TPC QPSK DVB-S2 IP core
  2. 以某SCI期刊为例说明该期刊投稿须知和流程
  3. 白杨SEO:QQ群SEO是什么?QQ群排名如何做引流与营销?【举例】
  4. 修复计算机命令行,如何用命令提示符修复系统还原_用cmd命令提示符恢复系统的方法...
  5. 生产者消费者的几种写法
  6. Ubuntu fatal: 无法访问 ‘https://github.com/xxxxx/xxxxx‘:Failed to connect to github.com port 443: 连接超时
  7. 一个小程序走完诉讼全程,腾讯云加速推动“智慧法院”方案落地
  8. edgex-ui中文版下载
  9. 哞力无法挡 516争抢最后一群斐讯“天天牛”
  10. 服务器系统漏洞rc4,服务器如何修复旧加密算法漏洞