You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按印度编号格式将数值转为英文单词?代码输出异常求助

问题:印度卢比数值转英文单词格式不符合印度规范

我编写了一个脚本,可将任意货币通过指定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")

解决方案

问题原因

  1. 汇率转换后得到的是浮点数,num2words处理带小数的数值时会输出包含小数部分的描述,不符合印度货币整数卢比的常规表述习惯
  2. 默认的en_IN语言输出不会自动添加rupees only这个印度规范要求的后缀
  3. 未明确指定基数词转换类型,可能出现格式偏差

修改后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:05:16