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

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

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)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中,可以使用以下方法将中文汉语数字阿拉伯数字相互转化。 1. 将阿拉伯数字转换为中文汉语数字: 可以使用一个方法,将阿拉伯数字的每一位转换为对应的中文数字。例如,可以创建一个方法`OneBitNumberToChinese`,将数字1-9转换为中文数字。然后,可以根据阿拉伯数字的位数,逐位转换为中文数字,并拼接起来。\[1\] 2. 将中文汉语数字转换阿拉伯数字: 可以使用一个方法,将中文汉语数字的每一位转换为对应的阿拉伯数字。可以创建一个方法`FFXieshu`,接受中文汉语数字作为参数,并返回对应的阿拉伯数字。该方法可以处理整数、小数、正数、负数等情况。\[2\]\[3\] 需要注意的是,转换中文汉语数字阿拉伯数字时,要考虑到数字的位数、小数点、计数单位等情况,以确保转换结果的准确性。 以下是一个示例代码,演示了如何在C#中实现中文汉语数字阿拉伯数字的相互转化: ```csharp public class ChineseNumberConverter { private static string\[\] chineseDigits = { "〇", "一", "", "三", "四", "五", "六", "七", "八", "九" }; private static string\[\] arabicDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; public static string ArabicToChinese(int number) { string chineseNumber = ""; string numberString = number.ToString(); foreach (char digit in numberString) { int digitValue = int.Parse(digit.ToString()); chineseNumber += chineseDigits\[digitValue\]; } return chineseNumber; } public static int ChineseToArabic(string chineseNumber) { string numberString = ""; foreach (char digit in chineseNumber) { int digitIndex = Array.IndexOf(chineseDigits, digit.ToString()); numberString += arabicDigits\[digitIndex\]; } return int.Parse(numberString); } } // 示例用法 int arabicNumber = 12345; string chineseNumber = ChineseNumberConverter.ArabicToChinese(arabicNumber); Console.WriteLine(chineseNumber); // 输出:一三四五 string chineseNumber = "一三四五"; int arabicNumber = ChineseNumberConverter.ChineseToArabic(chineseNumber); Console.WriteLine(arabicNumber); // 输出:12345 ``` 请注意,以上示例代码仅演示了基本的转换方法,实际应用中可能需要根据具体需求进行适当的修改和扩展。 #### 引用[.reference_title] - *1* [C# 实现阿拉伯数字转换为中文数字3种实现思路(递归拼接、循环拼接、if拼接)](https://blog.csdn.net/qq_38974638/article/details/108476401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [汉语数字转换阿拉伯数字](https://blog.csdn.net/ggggwhw/article/details/119961135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值