首页 > 代码 > 常规代码 > 正文

代码

阅读排行

金额数字转换为会计用金额大写
2015-05-14 16:19:36   来源:szw_sh@163.com   评论:0 点击:

本代码将金额数字转换为会计用的金额大写形式,符合Fortran规范,可直接使用。

函数:将金额数字转换为汉字大写形式
用法:str = cDigit(x)
参数:x 双精度的浮点数,输入
返回:cDigit  输出的会计用金额大写字符串
注意:返回空格表示输入数值越界,定义域:0<x<=999999999999.99
作者:szw_sh@163.com  
01Program www_fcode_cn
02  Implicit None
03  Character(len=56) :: cDigit
04  write(*,*) cDigit( 314223243431.34d0 )
05End Program www_fcode_cn
06 
07character(Len=56) Function cDigit(x)
08!函数:将金额数字转换为汉字大写形式
09!用法:str = cDigit(x)
10!参数:x 双精度的浮点数,输入
11!返回:cDigit  输出的会计用金额大写字符串
12!注意:返回空格表示输入数值越界,定义域:0<x<=999999999999.99
13!作者:szw_sh@163.com 
14  Implicit None
15  Real(Kind=8) x ! 输入数值定义为双精度型
16  Character(len=15) :: h ! x的临时字符变量
17  Integer :: np ! cDigit位置标记
18  Character(len=*) , parameter :: number='零壹贰叁肆伍陆柒捌玖'
19  Character(len=2) , parameter :: cnp_list(8) = ['仟','百','拾','亿','万','圆','角','分']
20  Integer , parameter :: np_list(14) = [1,2,3,4,1,2,3,5,1,2,3,6,7,8]
21  !//千亿,百亿,十亿,亿,千万,百万,十万,万,千,百,十,圆,角,分
22  integer :: i , k
23  cDigit = ' '
24  If ( x>999999999999.99D0 .Or. x<=0.0d0 ) Return ! 定义域检查
25  Write (h, '(f15.0)') x*100.0d0 ! 将小数2位一并归入整数,x转为字符形式,千分位自动舍入
26  If (h(14:14)=='0') h(14:14) = ' ' ! 自右向左检查为0的位(从第14位起,第15位为小数点):
27  Do i = 13, 1, -1 ! 尾部为0的以空格标记,大写中忽略
28    If (h(i:i)/='0') Cycle ! 连续的0只保留一个,其余标记为空格
29    If (index('$0 ',h(i+1:i+1))/=0) h(i:i) = ' ' ! 亿、万、千亿、千万位及个位的0必须在大写时表示,标记为$
30    If (mod(i,4)==0) h(i:i) = '$' ! 即位置i=4,8,12时
31  End Do
32  np = 1
33  Do i = 1, 14 ! 转换为汉字大写形式
34    If (h(i:i)==' ') Cycle ! 空格位忽略
35    If (h(i:i)/='$') Then ! 数字位转换为汉字大写
36      k = ichar(h(i:i)) - ichar('0')
37      cDigit(np:np+1) = number(2*k+1:2*k+2)
38      np = np + 2
39    End If
40    If (h(i:i)=='0') Cycle ! 遇0时略去数字单位标注
41    If ( i == 8 .and. cDigit(np-2:np-1)=='亿') cycle ! 万位,若亿位与万位之间均为0,则该位不标注
42    cDigit(np:np+1) = cnp_list(np_list(i))   
43    np = np + 2
44  End Do
45End Function cDigit

相关热词搜索:金额 会计 大写

上一篇:带默认值的屏幕输入
下一篇:EBCDIC 与 ASCII 编码相互转换

分享到:           收藏