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

JavaScript金额转英文单词:修复$10.20无法正确输出的问题

金额转英文单词代码修复

原代码无法正确处理$10.20这类含两位数美分的输入,核心问题是仅用长度为10的centsWords数组处理美分,只能识别0-9的单数美分,同时还存在单复数错误、冗余表述等问题。以下是修复后的代码:

function convertAmountToWords(amount) {
  const words = [
    "Zero", "One", "Two", "Three", "Four", "Five", 
    "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", 
    "Twelve", "Thirteen", "Fourteen", "Fifteen", 
    "Sixteen", "Seventeen", "Eighteen", "Nineteen"
  ];

  const tensWords = [
    "", "", "Twenty", "Thirty", "Forty", "Fifty", 
    "Sixty", "Seventy", "Eighty", "Ninety"
  ];

  // 通用函数:将0-99的数字转为英文单词
  function numberToWords(num) {
    if (num === 0) return "Zero";
    if (num < 20) return words[num];
    const tens = Math.floor(num / 10);
    const units = num % 10;
    return units === 0 
      ? tensWords[tens] 
      : `${tensWords[tens]} ${words[units]}`;
  }

  // 拆分美元和美分部分
  const [dollarStr, centStr] = amount.slice(1).split(".");
  const dollarNum = Number(dollarStr);
  const centNum = centStr ? Number(centStr) : 0;

  // 处理美元部分单复数
  const dollarWords = `${numberToWords(dollarNum)} ${dollarNum === 1 ? "Dollar" : "Dollars"}`;
  
  // 处理美分部分(仅当美分大于0时添加)
  let centPart = "";
  if (centNum > 0) {
    centPart = ` and ${numberToWords(centNum)} ${centNum === 1 ? "Cent" : "Cents"}`;
  }

  return `${dollarWords}${centPart}`;
}

// 测试验证
console.log(convertAmountToWords("$10.20")); // 输出: "Ten Dollars and Twenty Cents"
console.log(convertAmountToWords("$1.05")); // 输出: "One Dollar and Five Cents"
console.log(convertAmountToWords("$0.99")); // 输出: "Zero Dollars and Ninety Nine Cents"
console.log(convertAmountToWords("$5")); // 输出: "Five Dollars"

关键修改点

  • 新增numberToWords通用函数,统一处理0-99数字的转译逻辑,复用美元和美分的转换逻辑,避免重复代码。
  • 移除原有限制性的centsWords数组,支持两位数美分的正确转译(如20转为Twenty)。
  • 增加单复数判断:金额为1时用单数(Dollar/Cent),否则用复数(Dollars/Cents)。
  • 优化空美分场景:无小数部分或美分为0时,不输出多余的and及空内容。
  • 完善类型转换逻辑,确保字符串转数字的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:36:00