阿拉伯数字转换英文,适用于英文合同和国际贸易单证

本文介绍如何使用Python实现自动将国际贸易合同、发票中的金额转换为英文大写,详细讨论了转换规则,包括保留小数点两位、避免四舍五入、特定数字的英文表示及每三位分节的处理方式。

实现自动将国际贸易单证(合同、发票)等中的金额自动转换成英文大写。

作为初学者,练练手,记录下学习过程。

简单分析:

  1. 单证中的英文大写必须写全额,即保留小数点两位,不进行四舍五入
  2. 英文大写中只能有一个AND
  3. 数字0-19有单独写法
  4. 英文数字以三位一节

代码如下

#定义基础数字
BasicNumber={0:"zero",1:"one",2:"two",3:"three",4:"four",5:"five",6:"six",7:"seven",8:"eight",9:"nine",10:"ten",11:"eleven",12:"twelfe",13:"thirteen",14:"fourteen",15:"fifteen",16:"sixteen",17:"seventeen",18:"eighteen",19:"nineteen",20:"twenty",30:"thirty",40:"forty",50:"fifty",60:"sixty",70:"seventy",80:"eighty",90:"ninety"}

#定义基本单位
BasicUnit=["","thousand","million","billion"]


def convert_double_digit(number):
    #对个位及两位数的处理
    if number<20 or number%10==0: #若数字小于20,或除以10余数为0(即为10的倍数时),直接从字典获取

        return BasicNumber[number]
    else:  #反之,则获取十位对应的数字和个位对应的数字
        return BasicNumber[number//10*10]+"-"+BasicNumber[number%10]

def convert_triple_digit(number):
    #三位数的处理

    hundred=number//100 #获取百位数字
    digit=number%100 #获取十位、个位数字
    if hundred !=0: #若百位数字位不等于0,则转换百位数字+后两位数字
        return convert_double_digit(number//100) +" hundred " +convert_double_digit(number%100)
    else: #否则,直接转换后两位数字
        return  convert_double_digit(number)


def convert_number(number):
    #转换数字

    #首先处理数字
    number=int(number*100) #将数字乘以100,并获取整数部分,即截取到原数字2位小数,不进行四舍五入

    number="{:.2f}".format(number/100)#将截取后的数字恢复,并格式化为2位小数
    number=number.split(".") #将数字转化成格式化并用小数点分离

    integer="{:,}".format(int(number[0])) #获取整数部分,指定格式字符串,以逗号分割,三位一节
    decimal=int(number[1][:2])#获取小数部分,并转换为2位整数


    #处理小数部分
    if decimal==0:
        DecimalPart="no cent"
    else:
        DecimalPart= convert_double_digit(decimal) +" cent"

    #处理整数部分


    l=integer.split(",") #按照逗号拆分字符串,获取拆分后列表
    results=[] #定义转换后结果
    for digit in l:
        results.append(convert_triple_digit(int(digit))) #将拆分的数字转换成英文

    x=len(results) # 获取转换结果的长度
    
    IntPart="" #初始化整数部分的结果

    for r in range(x):
        IntPart=IntPart + results[r]+" " +BasicUnit[x-r-1]+" " #根据转换结果列表的长度获取对应的单位,并拼接到intpart

    

    return "SAY US DOLLAR "+IntPart.upper().strip() + " AND "+DecimalPart.upper()+" ONLY"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值