返回人民幣大寫方式(num2rmb)

2022-03-06 03:54:24 字數 4482 閱讀 8122

1

create

orreplace

function num2rmb(pi_money nvarchar2) return nvarchar2 is2--

purpose :返回人民幣大寫方式

3 v_num number

;4 i number

;5 j number

;6 k number

;7 l number

;8 fs1 nvarchar2(500

);9 fs2 nvarchar2(500

);10 fs3 nvarchar2(500

);11 s nvarchar2(500

);12 s1 nvarchar2(500

);13 s2 nvarchar2(500

);14 zero number

;15 pos number

;16 h number

;17 t number(5,4

);18 v_money number;19

begin

20 v_money :=

round(pi_money,2

);21

if nvl(v_money,0)=022

or instr(v_money,'

.')>=

18then

23return'無

';24endif;

25 zero :=0;

26 pos :=0;

27 fs1 :=

'零壹貳叄肆伍陸柒捌玖';

28 fs2 :=

'仟佰拾萬仟佰拾元';

29 fs3 :=

'仟佰拾萬仟佰拾億';

30 h := trunc(v_money);--

-整數部分

31 t := v_money - h;--

-小數部分

32if t =

0then

33--

-形成字串

34 s := lpad(to_char(h),16,'

0')||

'.0000';

35else

36 s := lpad(to_char(h),16,'

0')|| rpad(to_char(t),5,'0'

);37

endif

;38 s1 := substr(s,1,8)||'.

';39--

整理億位數字

40for i in

1..8

loop

41if i >= pos then

42--

-else skip 0

43 l := to_number(substr(s1, i,1

));44

if l >

0then

45--

add fs1 and fs2 char

46 s2 := s2 || substr(fs1, l +

1,1)|| substr(fs3, i,1

);47 zero :=

1;--

有整數48

else

49if i =

4then

50 s2 := s2 ||'萬

';51end

if;--

-插入萬字,因為從此出分隔一次迴圈

52 pos := i +1;

53for j in i +

1..9

loop

54if j =455

and substr(s1, j,1)='0

'56and s2 is

notnull

57and zero =

1then

58 s2 := s2 ||'萬

';59endif;

60if substr(s1, j,1)='0

'then

61 pos := pos +1;

62endif;

63exit

when substr(s1, j,1)!='0

';--

pos >=9;

64end

loop;

65if pos =966

and substr(s1,1,8)>=

1then

67 s2 := s2 ||'億

';--

無個億位,直接加億

68else

69if zero =

1then

70 s2 := s2 ||'零

';71end

if;--

不到個億位,補中間零 eg 10101

72endif;

73endif;

74endif;

75end

loop;

76 zero :=0;

77 pos :=0;

78--

整理億位之後的資料

79 s1 := substr(s,9

);80

for i in

1..8

loop

81if i =182

and to_number(substr(s1, i,1))=083

and s2 is

notnull

then

84 s2 := s2 ||'零

';85endif;

86if i >= pos then

87--

-else skip 0

88 l := to_number(substr(s1, i,1

));89

if l >

0then

90--

add fs1 and fs2 char

91 s2 := s2 || substr(fs1, l +

1,1)|| substr(fs2, i,1

);92 zero :=

1;--

有整數93

else

94if i =

4then

95 s2 := s2 ||'萬

';96end

if;--

-插入萬字,因為從此出分隔一次迴圈

97 pos := i +1;

98for j in i +

1..9

loop

99if j =

4100

and substr(s1, j,1)='0

'101

and s2 is

notnull

102and zero =

1then

103 s2 := s2 ||'萬

';104endif;

105if substr(s1, j,1)='0

'then

106 pos := pos +1;

107endif;

108exit

when substr(s1, j,1)!='0

';109end

loop;

110if pos =

9111

and v_money >=

1then

112 s2 := s2 ||'元

';--

無個位,直接加元

113else

114if zero =

1then

115 s2 := s2 ||'零

';116end

if;--

不到個位,補中間零 eg 10101.00

117endif;

118endif;

119endif;

120end

loop;

121if substr(s1,10,4)=

'0000

'then

122 s2 := s2 ||'整

';123else

124 l := to_number(substr(s1,10,1

));125

if l >

0then

126 s2 := s2 || substr(fs1, l *1+

1,1)||'角

';127else

128if v_money >

0.1then

129 s2 := s2 ||'零

';130end

if;--

去掉0.01的前導零

131endif;

132 l := to_number(substr(s1,11,1

));133

if l >

0then

134 s2 := s2 || substr(fs1, l *1+

1,1)||'分

';135endif;

136endif;

137return

s2;138

end num2rmb;

sql語句 返回人民幣 大寫

create or replace function l2u 小寫金額轉換成大寫 n lowermoney in number return varchar2 asv lowerstr varchar2 200 小寫金額 v upperpart varchar2 200 v upperstr var...

人民幣金額大寫

q 在與財務相關的應用中,經常會用到人民幣金額的大寫,比如發票的列印程式。本題的任務是 從鍵盤輸入乙個十億以內的正整數 int型別 把它轉換為人民幣金額大寫 不考慮使用者輸入錯誤的情況 比如,使用者輸入 35201,程式輸出 叄萬伍仟貳佰零壹 使用者輸入 30201,程式輸出 叄萬零貳佰零壹 使用者...

人民幣大寫轉換

人民幣大寫轉換 param numbervalue 人民幣小寫 return rmbcapital function numbervalue var chinesevalue 轉換後的漢字金額 var string1 零壹貳叄肆伍陸柒捌玖 漢字數字 var string2 萬仟佰拾億仟佰拾萬仟佰拾元...