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

如何在JavaScript中将口语化数字转换为整数?

解决英文口语数字转整数的问题

为什么parseInt/Number无法解决问题

parseInt 和 Number 仅能解析由阿拉伯数字组成的字符串(比如 "5"),对英文数字单词(比如 "five")不具备识别能力,返回 NaN 是预期行为,这类方法不适合你的场景。

替代方案:实现英文数字解析逻辑

手动编写解析函数比堆砌if语句扩展性强得多,核心思路是先建立单词到数值的映射,再根据英文数字的组合规则(比如hundred对应百级、thousand对应千级)累加计算。

步骤1:建立单词-数值映射表

覆盖基础数字、整十数和常用量级词:

const wordToNumberMap = {
  zero: 0, one: 1, two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9,
  ten: 10, eleven: 11, twelve: 12, thirteen: 13, fourteen: 14, fifteen: 15, sixteen: 16,
  seventeen: 17, eighteen: 18, nineteen: 19, twenty: 20, thirty: 30, forty: 40, fifty: 50,
  sixty: 60, seventy: 70, eighty: 80, ninety: 90, hundred: 100, thousand: 1000, million: 1000000
};

步骤2:编写解析函数

遍历单词数组,根据量级规则计算数值,同时忽略口语中无意义的and:

function convertSpokenNumberToInt(spokenStr) {
  // 预处理:转小写、分割单词、过滤"and"
  const words = spokenStr.toLowerCase().split(/\s+/).filter(word => word !== 'and');
  
  let total = 0;
  let currentGroup = 0; // 存储当前未遇到大级别量级的数值(比如"twenty five"里的25)

  for (const word of words) {
    const num = wordToNumberMap[word];
    if (num === undefined) {
      throw new Error(`无法识别的数字单词:${word}`);
    }

    if (num === 100) {
      // hundred级别:当前组数值乘以100(比如"two hundred" → 2*100=200)
      currentGroup *= num;
    } else if (num >= 1000) {
      // 千及以上级别:当前组数值乘量级后加到总和,重置当前组
      total += currentGroup * num;
      currentGroup = 0;
    } else {
      // 基础数字或整十数:加到当前组
      currentGroup += num;
    }
  }

  // 最后把剩余的当前组数值加到总和
  return total + currentGroup;
}

测试示例

console.log(convertSpokenNumberToInt("seven")); // 输出7
console.log(convertSpokenNumberToInt("twenty five")); // 输出25
console.log(convertSpokenNumberToInt("one hundred and twenty six")); // 输出126
console.log(convertSpokenNumberToInt("two hundred thirty five thousand")); // 输出235000

优势说明

这个方案能处理从单个数字到百万级的口语化数字,比硬编码if语句扩展性强,后续只需在映射表中补充更多量级词(比如billion)就能支持更大的数字。

内容的提问来源于stack exchange,提问作者2539901

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:43:23