oracle 数字与汉字转换(二)

2014-11-24 14:25:35 · 作者: · 浏览: 1
_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;
END czutil;