如何按印度编号格式将数值转为英文单词?代码输出异常求助
问题:印度卢比数值转英文单词格式不符合印度规范
我编写了一个脚本,可将任意货币通过指定API获取的最新汇率转换为印度卢比(INR),再将转换后的数值按印度编号风格转为英文单词。代码功能正常,但输出的单词格式不符合印度规范——比如数值Rs 198400应该输出one lakh ninety eight thousand four hundred rupees only,但当前输出达不到这个要求。
原代码如下:
import requests import num2words def convert_ccy_to_inr(ccy_amount, ccy): # 获取指定货币的最新汇率 r = requests.get(f"https://api.exchangerate-api.com/v4/latest/{ccy}") exchange_rate = r.json()["rates"]["INR"] # 将指定货币金额转换为INR inr_amount = ccy_amount * exchange_rate # 将INR金额转换为印度编号体系的英文单词 inr_amount_words = num2words.num2words(inr_amount, lang='en_IN') return inr_amount_words # 接收用户输入的金额和货币代码 ccy_amount = float(input("Enter the currency amount: ")) ccy = input("Enter the currency code (e.g. USD, GBP, EUR): ") # 转换并显示结果 inr_amount_words = convert_ccy_to_inr(ccy_amount, ccy) print(f"{ccy_amount} {ccy} is equivalent to {inr_amount_words} rupees")
解决方案
问题原因
- 汇率转换后得到的是浮点数,
num2words处理带小数的数值时会输出包含小数部分的描述,不符合印度货币整数卢比的常规表述习惯 - 默认的
en_IN语言输出不会自动添加rupees only这个印度规范要求的后缀 - 未明确指定基数词转换类型,可能出现格式偏差
修改后的代码
import requests import num2words def convert_ccy_to_inr(ccy_amount, ccy): # 获取指定货币的最新汇率 r = requests.get(f"https://api.exchangerate-api.com/v4/latest/{ccy}") exchange_rate = r.json()["rates"]["INR"] # 将指定货币金额转换为INR并取整(如需处理派萨可保留两位小数拆分处理) inr_amount = round(ccy_amount * exchange_rate) # 按印度编号体系转换为基数词 inr_amount_words = num2words.num2words(inr_amount, lang='en_IN', to='cardinal') # 调整为印度规范格式:小写+标准后缀 formatted_words = f"{inr_amount_words.lower()} rupees only" return formatted_words # 接收用户输入的金额和货币代码 ccy_amount = float(input("输入货币金额: ")) ccy = input("输入货币代码(例如 USD, GBP, EUR): ") # 转换并显示结果 inr_amount_words = convert_ccy_to_inr(ccy_amount, ccy) print(f"{ccy_amount} {ccy} 等价于 {inr_amount_words}")
关键修改点
- 取整处理:用
round()把汇率转换后的浮点数转为整数,符合印度卢比金额转单词的常规场景;若需要处理派萨(1卢比=100派萨),可保留两位小数后拆分整数和小数部分分别转换 - 格式标准化:将转换后的单词转为小写,并添加
rupees only后缀,匹配印度货币金额的规范表述 - 明确转换类型:添加
to='cardinal'参数,确保输出为基数词,避免其他格式干扰
测试示例:当输入对应198400 INR的外币金额时,输出为one lakh ninety-eight thousand four hundred rupees only(连字符为num2words自动生成的规范格式)
内容的提问来源于stack exchange,提问作者user20432746
相关产品推荐
相关产品推荐

