您的位置:首页 > 其它

将数字金额转换为人民币大写字符串

2013-03-12 07:57 411 查看
function zfi_amount_to_upper.

*"----------------------------------------------------------------------

*"*"Local interface:

*" IMPORTING

*" REFERENCE(IN) TYPE WERT8

*" EXPORTING

*" REFERENCE(OUT) TYPE STRING

*"----------------------------------------------------------------------

data:

v_s00(2) value '零',

v_s01(2) value '壹',

v_s02(2) value '贰',

v_s03(2) value '叁',

v_s04(2) value '肆',

v_s05(2) value '伍',

v_s06(2) value '陆',

v_s07(2) value '柒',

v_s08(2) value '捌',

v_s09(2) value '玖',

v_w00(2) value '',

v_w01(2) value '拾',

v_w02(2) value '佰',

v_w03(2) value '仟',

v_w04(2) value '万',

v_w05(4) value '拾',

v_w06(4) value '佰',

v_w07(4) value '仟',

v_w08(2) value '亿',

v_w09(4) value '拾',

v_w10(4) value '佰',

v_w11(4) value '仟',

v_w12(4) value '万',

v_sy(2) value '圆',

v_sj(2) value '角',

v_sf(2) value '分',

v_amount(16),"将金额转换成字符型

v_len type i,"v_amount或out的长度

v_var(5),"v_s0,v_s1,...,v_w0,v_w1,...

v_num(2) type n,"每一位的数值

v_s_num(2),"v_s0,v_s1,...中的值

v_weight(2) type n,"权数

v_w_num(4),"v_w0,v_w1,...中的值

v_flag0 type i value 0,"是否输出'零',0不输出,1输出

v_n type i value 0,

v_index type sy-index.

v_amount = in.

shift v_amount left deleting leading space.

shift v_amount left deleting leading '0'.

*-计算分-----------------------------------------

v_len = strlen( v_amount ).

v_len = v_len - 1.

v_num = v_amount+v_len(1).

if v_num <> '0'.

concatenate 'v_s' v_num into v_var.

write (v_var) to v_s_num.

concatenate v_s_num v_sf out into out.

endif.

*-计算角-----------------------------------------

v_len = strlen( v_amount ).

v_len = v_len - 2.

v_num = v_amount+v_len(1).

if v_num <> '0'.

concatenate 'v_s' v_num into v_var.

write (v_var) to v_s_num.

concatenate v_s_num v_sj out into out.

endif.

*-输出‘整’字-------------------------------------

if out = ' '.

concatenate '整' out into out.

endif.

*-计算整数---------------------------------------

v_len = strlen( v_amount ).

v_len = v_len - 3.

if v_len = 0.

exit.

endif.

v_amount = v_amount(v_len)." 整数部分

*-输出‘元’字-------------------------------------

concatenate v_sy out into out.

v_n = v_len - 1.

v_weight = 0.

do v_len times.

v_index = sy-index.

* 从个位开始

v_num = v_amount+v_n(1).

if v_num <> '0'.

concatenate 'v_s' v_num into v_var.

write (v_var) to v_s_num.

concatenate 'v_w' v_weight into v_var.

write (v_var) to v_w_num.

concatenate v_s_num v_w_num out into out.

v_flag0 = 1.

else.

if v_flag0 = 1.

concatenate 'v_s' v_num into v_var.

write (v_var) to v_s_num.

concatenate v_s_num out into out.

v_flag0 = 0.

endif.

if v_index = 5 and v_len > 5 and v_len < 9 .

concatenate '万' out into out.

elseif v_index = 9 and v_len > 9.

concatenate '亿' out into out.

endif.

* CASE SY-INDEX.

* WHEN 5.CONCATENATE '万' OUT INTO OUT.

* WHEN 9.CONCATENATE '亿' OUT INTO OUT.

* ENDCASE.

endif.

v_weight = v_weight + 1.

v_n = v_n - 1.

enddo.

*-删除个位可能出现'零'的情况-----------------

search out for '圆'.

if sy-subrc = 0.

v_n = sy-fdpos - 2.

if v_n >= 0.

if out+v_n(2) = v_s00.

v_len = strlen( out ).

concatenate out(v_n) out+sy-fdpos into out.

endif.

endif.

endif.

endfunction.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: