之前因公司業務需求,需要將錄入的漢字自動轉為阿拉伯數字存放到資料庫中,網上有好多阿拉伯數字轉為漢字的且正確的。但是漢字轉為阿拉伯數字的卻很少有正確的 。下面是正確的oracle函式,可正確轉換漢字。(可轉14位數左右,更大的數轉換會有問題。)
create or replace function chinesetonum (chival in varchar2) return number
astype str_array is table of varchar2(10) index by binary_integer;
type num_array is table of number index by binary_integer;
type num_map is table of number index by varchar2(10);
rmb_numbers num_map;
unit_numbers str_array;
big_unit_numbers str_array;
unit_val_numbers num_array;
result number :=0;
i integer;
ind integer := -1;
money varchar2(200) ;
pre_money varchar2(200) ;
n number;
begin
rmb_numbers('一') := 1;
rmb_numbers('二') := 2;
rmb_numbers('三') := 3;
rmb_numbers('四') := 4;
rmb_numbers('五') := 5;
rmb_numbers('六') := 6;
rmb_numbers('七') := 7;
rmb_numbers('八') := 8;
rmb_numbers('九') := 9;
rmb_numbers('零') := 0;
rmb_numbers('壹') := 1;
rmb_numbers('貳') := 2;
rmb_numbers('叄') := 3;
rmb_numbers('肆') := 4;
rmb_numbers('伍') := 5;
rmb_numbers('陸') := 6;
rmb_numbers('柒') := 7;
rmb_numbers('捌') := 8;
rmb_numbers('玖') := 9;
rmb_numbers('整') := 0;
unit_numbers(1) := '億';
unit_numbers(2) := '萬';
unit_numbers(3) := '千';
unit_numbers(4) := '百';
unit_numbers(5) := '十';
unit_numbers(6) := '元';
unit_numbers(7) := '角';
unit_numbers(8) := '分';
unit_numbers(9) := '釐';
big_unit_numbers(1) := '億';
big_unit_numbers(2) := '萬';
big_unit_numbers(3) := '仟';
big_unit_numbers(4) := '佰';
big_unit_numbers(5) := '拾';
big_unit_numbers(6) := '圓';
big_unit_numbers(7) := '角';
big_unit_numbers(8) := '分';
big_unit_numbers(9) := '釐';
unit_val_numbers(1) := 100000000;
unit_val_numbers(2) := 10000;
unit_val_numbers(3) := 1000;
unit_val_numbers(4) := 100;
unit_val_numbers(5) := 10;
unit_val_numbers(6) := 1;
unit_val_numbers(7) := 0.1;
unit_val_numbers(8) := 0.01;
unit_val_numbers(9) := 0.001;
money:= chival;
if (money is null ) then
return result;
end if;
-- 9 是計量單位的長度
for i in 1..unit_numbers.count loop
ind := instr(money, unit_numbers(i), -1 , 1);
if ( ind = 0 ) then
ind := instr(money, big_unit_numbers(i), -1 , 1);
end if;
if ( ind > 0 ) then
pre_money := substr(money,1,ind -1);
money := substr(money,ind + 1);
if ( pre_money is null and unit_val_numbers(i) = 10 ) then
result := result + unit_val_numbers(i);
else
result := result + chi2num(pre_money) * unit_val_numbers(i);
end if;
end if;
end loop;
if (money is not null ) then
n := rmb_numbers(money);
if ( n is not null) then
result := result + n;
end if;
end if;
return result;
end;
阿拉伯數字轉成漢字
做乙個中醫專案時後台返回是阿拉伯數字,專案需求是需要轉化為中文數字,記錄一下轉化方法,感覺要比那種switch.case.拓展性好一點。因為當時不會超過一千,所以就寫到了百位,其他需求可以自行更改一下。當然預設傳的是整數型別的。public class numbertochineseutil str...
將阿拉伯數字轉為中文數字讀法
本文提供八位數以內的轉換,八位數以上可以自行修改。例如 10 十 1002 一千零二 100021 十萬零二十一 1111111 一百一十一萬一千一百一十一 package com.huang.number created by huangguojun on 2018 11 10.public cl...
Python 將中文大寫數字轉為阿拉伯數字
平時會碰到把中文大寫的金額轉為阿拉伯數字,比如叄仟伍佰陸拾玖元肆角需要轉為3569.4,嘗試編寫函式如下 def convert igit cn num cn unit regex re.compile r 一二三四五六七 零壹貳叄肆伍陸柒捌玖貮兩十拾百佰千仟萬萬億億兆元角分 regex.searc...