oracle中文数字转阿拉伯数字

CREATE OR REPLACE FUNCTION chi2num(chivalue IN VARCHAR2) RETURN NUMBER IS

TYPE MAP IS TABLE OF BINARY_INTEGER INDEX BY VARCHAR2(10);
  ling_jiu_map   MAP;
  shibaiqian_map MAP;
  wanyizhao_map  MAP;
  --临时变量
  i            INT := 0; --‘临时变量
  k            INT := 0; --临时变量
  x            INT := 0; --临时变量
  str          VARCHAR2(100) := ‘‘; --临时变量
  tmp          INT := 0; --临时变量
  tmp2         INT := 0; --临时变量
  integer_part VARCHAR2(100) := ‘‘; --数字形式整数部分
  float_part   VARCHAR2(100) := ‘‘; --数字形式小数部分
  returnvalue  NUMBER := 0; --返回值
BEGIN
  --初始化数组
  ling_jiu_map(‘零‘) := 0;
  ling_jiu_map(‘一‘) := 1;
  ling_jiu_map(‘二‘) := 2;
  ling_jiu_map(‘三‘) := 3;
  ling_jiu_map(‘四‘) := 4;
  ling_jiu_map(‘五‘) := 5;
  ling_jiu_map(‘六‘) := 6;
  ling_jiu_map(‘七‘) := 7;
  ling_jiu_map(‘八‘) := 8;
  ling_jiu_map(‘九‘) := 9;
  shibaiqian_map(‘‘) := 0;
  shibaiqian_map(‘十‘) := 1;
  shibaiqian_map(‘百‘) := 2;
  shibaiqian_map(‘千‘) := 3;
  wanyizhao_map(‘‘) := 0;
  wanyizhao_map(‘万‘) := 1;
  wanyizhao_map(‘亿‘) := 2;
  wanyizhao_map(‘兆‘) := 3;

str := REGEXP_REPLACE(chivalue, ‘^十‘, ‘一十‘);
  str := REGEXP_REPLACE(str, ‘零十‘, ‘零一十‘);
  --将数字拆分为整数与浮点数两个数字数组
  i := INSTR(str, ‘点‘, 1);

IF i = 0 THEN
    integer_part := SUBSTR(str, 1);
  ELSE
    integer_part := SUBSTR(str, 1, i - 1);
    float_part   := SUBSTR(str, i + 1);
  END IF;

--整型部分
  x    := LENGTH(integer_part);
  str  := ‘‘;
  tmp  := 0;
  tmp2 := 0;

FOR k IN 1 .. x LOOP
    str := SUBSTR(integer_part, k, 1);
 
    IF str IN (‘万‘, ‘亿‘, ‘兆‘) THEN
      --当碰到万亿兆时
      tmp         := tmp + tmp2;
      returnvalue := returnvalue + tmp * POWER(10000, wanyizhao_map(str));
      tmp         := 0;
      tmp2        := 0;
    ELSIF str IN (‘十‘, ‘百‘, ‘千‘) THEN
      --当碰到十百千时
      tmp  := tmp + tmp2 * POWER(10, shibaiqian_map(str));
      tmp2 := 0;
    ELSE
      --当碰到数字时
      tmp2 := ling_jiu_map(str);
    END IF;
  END LOOP;

--最后将没有小于万位数加到整数中去
  tmp         := tmp + tmp2;
  returnvalue := returnvalue + tmp;

IF float_part IS NOT NULL THEN
    --计算小数部分
    k   := 0;
    tmp := ‘‘;
 
    FOR k IN 1 .. LENGTH(float_part) LOOP
      tmp := tmp || ling_jiu_map(SUBSTR(float_part, k, 1));
    END LOOP;
 
    returnvalue := returnvalue || ‘.‘ || tmp;
  END IF;

RETURN returnvalue;
END;

时间: 2024-08-12 00:54:07

oracle中文数字转阿拉伯数字的相关文章

中文数字转阿拉伯数字

package com.test.utils.utils; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ChineseNumber2ALB { public static void main(String[] args) { St

简单中文数字转阿拉伯数字

#coding:cp936 __author__ = 'JYC103' num_dic={'一':1,'二':2,'三':3,'四':4,'五':5,'六':6,'七':7,'八':8,'九':9,'零':0} put_num=raw_input('输入中文数字:') #print put_num for key in num_dic:     #print key,num_dic[key]     if put_num == key:         print put_num,'对应的阿拉伯

javascript 中文数字阿拉伯数字转换类 Nzh

之前工作中碰到了数字转中文的情景,网上找的现成方法或多或少合我口味,最后还是自已写了一个. 现在整理了一下,补充了繁体,自定义字符,以及反函数(中文数字转阿拉伯数字) 现在发布出来,希望能合大家的口味. demo: http://cnwhy.github.io/nzh/demo/index.html 项目地址: https://github.com/cnwhy/nzh 欢迎push Nzh Nzh适用于开发过程中需要将数字转换为中文的场景 以字符串的方式转换,解决超大数及浮点数等问题,请自行对原

阿拉伯数字与中文数字的转换----------相互转化

今天继续看<算法的乐趣>,学习了阿拉伯数字与中文数字的转化. 汉字用零一二三四五六七八九作为基本计数,与阿拉伯数字靠数字偏移位置的权位不一样.中文数字是才有"数字+权位"的方式组成数字,比方百,千,万. 中文数字每一个数字后都会跟上一个权位.权位就是数字的量值,相当于阿拉伯数字的数位. 中文计数以万为小节,万下面没有节权,万之上是亿为节权. 中文另一个特点是多变的"零",大概总结为三个规则: 1.以10000为小节.小节的结尾即使是0,也不使用"

中文数字转换成阿拉伯数字(一千二百三十四万五千六百七十八--&gt;12345678)

昨天老大问我又没有写过中文数字转换成阿拉伯数字,我说没有,我说那应该简单啊,就是将中文对应的数字换成阿拉伯数字就好了啊,比如一就换成1,二就换成2…十换成10.可是那么问题来了…… 一十二呢…不能是1102吧…这不就坑爹了吗?一百万呢………所有我苦苦思索,花费了我差不多半天的时间,终于写出了下面的程序. 1 public static void main(String[] args){ 2 3 Map<Character, String> numberMap = new HashMap<

阿拉伯数字转中文数字

package algorithm.other; /** * 阿拉伯数字转中文数字 * @author NINGUANG * */public class ChineseNum{ private static String[] chnNumChar = { "零", "一", "二", "三", "四", "五", "六", "七", "

【iOS开发系列】将阿拉伯数字转换为中文数字

/** * 将阿拉伯数字转换为中文数字 */ +(NSString *)translationArabicNum:(NSInteger)arabicNum { NSString *arabicNumStr = [NSString stringWithFormat:@"%ld",(long)arabicNum]; NSArray *arabicNumeralsArray = @[@"1",@"2",@"3",@"4&q

js阿拉伯数字转中文数字

//阿拉伯数字转中文数字 function NoToChinese(num) { if (!/^\d*(\.\d*)?$/.test(num)) { alert("Number is wrong!"); return "Number is wrong!"; } var AA = new Array("零", "一", "二", "三", "四", "五&qu

trie树信息抽取之中文数字抽取

这一章讲一下利用trie树对中文数字抽取的算法.trie树是一个非常有用的数据结构,可以应用于大部分文本信息抽取/转换之中,后续会开一个系列,对我在实践中摸索出来的各种抽取算法讲开来.比如中文时间抽取,地址抽取等. Trie树 trie树又称为前缀树,索引树,字典树.用来对字符串进行索引,每个节点存储一个字符,每个叶子节点代表一个字符串,即从根到它的路径上所有字符的序列. 这个结构有什么优点呢?可以快速的匹配一个目标字符串中存在的单词.换句话说,我有一个字典,是单词的集合,我把字典中所有的单词存