汉字数字与阿拉伯数字的转换

网上看了许多说法,感觉这个事情本身不复杂,不过也没许多人嘴炮说得那么简单。想法谁都有,都觉得自己能实现,不过许多人“信誓旦旦”地把这个写了之后,发现会报各种各样的错误。在此我把代码写上,附上我的想法。

1.区分各种项

1.1 转换项

这种最简单,1——一,2——二,以此类推。记住不要忘了0——零

1.2 数量级项

十——10,百——100,千——1000,记住没有万,因为万和亿很特殊,前后的级数都是数字计数法

1.3 乘积项

这些项出现的时候,前面累计求和的所有数字都要乘以该项。比如“三百三十七万”
万——10000

1.4 分隔项

这一项的设计是防止亿和万同时出现的时候,被乘了两次。

2.是正着读入还是负着读入

许多人自以为是的倒着读入,实际上是为问题新增了许多难度。

我倾向于正着读入,比如“一千三百四十八”这个数,读了1,再读数量级项“千”,就把刚刚读入的数乘以1000,然后加到总和里归零。

【注意】在正着读入的时候,要判断某一项后面没有“乘积项”【或者到达了数字末尾】,如果有,说明读到了个位,这时候不应继续读下去了,而是应直接加上该个位数。不要再等着乘以数量级项了。

代码如下:

vocabulary = {u"一":1,u"二":2,u"三":3,u"四":4,u"五":5,u"六":6,u"七":7,u"八":8,u"九":9,u"零":0}
quantity_dict = {u"十":10,u"百":100,u"千":1000}
stamp_dict = {u"万":10000,u"亿":100000000}
def liter_to_number_under_yi(a):    
        if not a:
            return 0
        sum = 0
        value = 0
        for num in range(len(a)):
            if a[num] in vocabulary:
                print 
                value = vocabulary[a[num]]
                if num+1 >= len(a) or a[num+1] in stamp_dict:
                    sum += value
                    value = 0
            elif a[num] in quantity_dict:
                value = value * quantity_dict[a[num]]
                sum += value
                value = 0
            elif a[num] in stamp_dict:
                sum *= stamp_dict[a[num]]
        #最后加一个判断,sum_all和sum哪个大。【汉字转数字,技巧:从左往右转,判断下一位是不是万,亿等。在万亿的时候,要记得清空】
        return sum

def litertonum(a):
    a_list = a.split(u"亿")
    print a_list[0]
    print a_list[1]
    return liter_to_number_under_yi(a_list[0])*100000000+liter_to_number_under_yi(a_list[1])
a = u"一千二百五十一万零一亿一千二百五十八万零一百三十四"
litertonum(a)

代码从“亿”这个地方分隔,分隔后两边分别跑这个子函数。然后得到结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值