一个金额转换函数,将数字转为中文人民币

软件和网站开发以及相关技术探讨
回复
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

一个金额转换函数,将数字转为中文人民币

#1

帖子 oneleaf » 2009-01-17 16:14

来源: http://weaver.blogbus.com/logs/32199259.html

代码: 全选

#!/usr/bin/env python
# -*- encoding: UTF-8 -*-
import sys

def amt2chn(amt):
   
    mnUnit = ("分", "角", "元")
    fixWord = ("整", "负", "人民币")
    chUnit = ("拾", "佰", "仟", "万", "拾", "佰", "仟", "亿")
    chCapt = ("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")
   
    chn = fixWord[2]
    iLen = 0
    iLen2 = 0
    iNum = 0
    iAdd0 = 0
    s_amt = str(int(amt*100.0))
    iLen = len(s_amt)
   
    if ( amt < 0.00 ):
        chn += fixWord[1]
        s_amt = s_amt[1:]
        iLen -= 1
   
    for i in range(iLen):
        iNum = int(s_amt[i])
        iLen2 = iLen - i - 1
        if ( 0 == iNum):
            if ( (iLen2-2)%4==0 and (iLen2-3)>0 and ((iLen2>=8) or iAdd0<3) ):
                chn += chUnit[(iLen2-3)%8]
            iAdd0 += 1
        else:
            if ( iLen>1 and iLen2==0 and iAdd0>0 ):
                chn += chCapt[0]
            if ( (iAdd0 and iLen2>=2) and
                 ((iLen2-1)%4!=0) or (iAdd0>=4 and (iLen2-1)>0) ):
                chn += chCapt[0]
            chn += chCapt[iNum]
            iAdd0 = 0
        if ( (iAdd0<1) or (iLen2==2) ):
            if( iLen2>=3 ):
                chn += chUnit[(iLen2-3)%8]
            else:
                chn += mnUnit[(iLen2)%3]
   
    l_chn = len(chn) - len(fixWord[2])
    l_chn = int(l_chn/1.5)
    if( l_chn+(amt<0.00 and (-2) or 0) == 0 ):
        chn += chCapt[0]
        chn += mnUnit[2]
        chn += fixWord[0]
    elif ( s_amt[iLen-1] == '0' ):
        chn += fixWord[0]
   
    return chn

if __name__ == '__main__':
   if len(sys.argv) < 2:
      amt = 123456.789
   else:
      amt = float(sys.argv[1])
   print amt, ':', amt2chn(amt) 
izee
帖子: 661
注册时间: 2007-01-26 13:38

Re: 一个金额转换函数,将数字转为中文人民币

#2

帖子 izee » 2009-01-17 17:17

代码: 全选

#!/usr/bin/env python

代码: 全选

#!/usr/bin/python
的区别在哪里?

是不是第一个是让通过env返回解释器路径
第二个是直接指定解释器路径
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: 一个金额转换函数,将数字转为中文人民币

#3

帖子 oneleaf » 2009-01-17 18:55

各有好处,对于bsd而言,后者可能无法正确运行。对于linux,后者可以被系统识别为py脚本,并且少调用一个环节,速度比较好。

也就是前者的兼容性比较好,后者在linux下的速度比前者快。
头像
weaveol
帖子: 10
注册时间: 2007-07-24 22:54
来自: 火星
联系:

Re: 一个金额转换函数,将数字转为中文人民币

#4

帖子 weaveol » 2009-01-18 9:45

哈哈

这枚源代码的源地址:http://weaver.blogbus.com/logs/32199259.html
另GUI程序源地址:http://weaver.blogbus.com/logs/32266348.html
Weave Us The Sunshine,Weave Us The Hope Of A New Tomorrow.
回复