网上找了好几篇博客,测试或多或少有问题,以下已验证可以使用。

create or replace function cux_convert_cny(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; --当前数字位数  
      
    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; --取得小数点右边的数字  
      
      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 mod(num_count - 1, 4) = 0 then  
            --当前位是元、万或亿时  
            result  := substr(str2, num_count, 1) || result;  
            num_pre := 0; --元、万,亿前不准加零  
          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. 数字转换成人民币大写格式(带界面)

    今天看了算法的公开课,有一个把数字转换成人民币大写的算法. 后面就想着自己写一个界面的,好几天没有写一个完整的程序的. 当然有一些BUG,没有时间优化,后面在慢慢优化. 自己的名言:每天努力一点儿,总 ...

  2. 关于数字转换成人民币大写的问题

    我们在参与大型项目时,难免会遇到数值转换人民币大写的情况.因为我今天接触了一个这样的转换,但原代码存在BUG,转换经常出现问题.于是我就去网上搜索了相关资源.由于没有找到相对权威的转换代码,网上给出的 ...

  3. JAVA浮点数转人民币读法_算法--java实现将数字转换成人民币大写(迅雷面试题)...

    public classRmb {/*** 人民币的基本信息和操作 * *@authorsoyoungboy *@version1.0*/ private double number; //人民币的数 ...

  4. 浮点数字转换成人民币的大写字体

    新开博客,贴上一段平常时写的代码,权当记录和分享. 下面是代码块(有比较详细的注释,转换过程中需要注意的是0的处理): //浮点数字转换成人民币的大写字体 import java.util.Scann ...

  5. 把数字金额转换成人民币大写[原创]

    最近在用这个博客,感觉博客园不错,以前用的是新浪的,感觉这个更好,所以好多东西现在转到这边来了. 下面是一个数字转人民币大写的类,不啰嗦了,下面是代码:  1    /**/ /// <summ ...

  6. js将数字转换成中文大写

    //完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五.const toChinesNum = ( ...

  7. C语言-如何将用户输入的金额数字转换成中文大写?

    实战: 如何将用户输入的金额数字转换成中文大写? #include <stdio.h>int main() {// 输入金额转换成大写int money; // 输入数字int money ...

  8. JavaScript:将输入的一串数字转换成中文大写,最高可写12位(千亿)

    将输入的一串数字转换成中文大写,最高可写12位(千亿) 例:输入:10000,输出:壹万 输入:10010,输出:壹万零壹拾 源码: function toChineseBig(num) {// 将接 ...

  9. 将数字转换成中文大写的算法

    //名称:ConvertSignCap   //参数:number   //返回:CapNumber   //描述:将传入的单个数字转换成中文大写形式   //创建人:刘权 2004-11-16    ...

最新文章

  1. 【学习求职必备】百度AI和它的7大AI黑科技
  2. win7中cookie的保存位置
  3. C++ 关键字 (try-finally) 收藏
  4. 【数据库】PLSQL Developer出现ORA-12541TNS no listener错误解决方法
  5. C++|Qt工作笔记-对explicit的认识(Qt中一般情况下为什么会自动加上这个关键字)
  6. Java中如何在窗口加一行字,如何在java中实现读文件(一行一行地读)和写文件(一行一行地追加写)...
  7. Rust : 如何use本地化crate与 dependencies 和 path
  8. uC/os内存优化——TLSF算法
  9. ASLD 高级固体激光器设计及仿真软件
  10. 轻仓的贵金属白银今日走势分析
  11. Oracle 同比环比
  12. bzoj 3162: 独钓寒江雪 树形dphash
  13. MacOS系统通过命令行启动Chrome浏览器并添加启动参数
  14. [055] SSL 3.0曝出Poodle漏洞的解决方案-----开发者篇
  15. Xtrabackup 安装以及 mysql 使用 Xtrabackup 物理备份过程记录
  16. 详解TP-Link路由器设置(图解)
  17. Win7 下安装 Visual Studio 2008 失败的解决办法
  18. [xiaoyi和你飞]博弈基础 ——[AB]
  19. 光子计算机ppt,光量子计算机.ppt
  20. python 把数字转换成中文大写

热门文章

  1. [pytorch] PyTorch Metric Learning库代码学习二 Inference
  2. Xcode7创建类别Category
  3. oracle10503事件,使用10203事件来跟踪oracle块清除
  4. Vue PDF文件预览打印vue-pdf
  5. Linux教学资源服务器构建
  6. QT实现PDF打印文字+图片。亲测可用!!!
  7. delphi负数变正数_Delphi Format 格式化数字
  8. pytorch实现lstm分类模型
  9. Mac 上快速切换同一程序的窗口
  10. python流量监控,python监控历程网络流量