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

如何在Angular或TypeScript中将数字转换为波斯语单词

Angular 实现数字转波斯语单词方案

方案1:修复现有persianjs包的TypeScript导入问题

不需要更换依赖包,手动补全类型声明即可解决报错:

  • 在项目src目录下新建persianjs.d.ts类型声明文件,写入以下内容:
declare module 'persianjs' {
  interface PersianJsInstance {
    /** 数字转波斯语单词方法 */
    words(): string;
    /** 数字转波斯语数字字符方法 */
    digits(): PersianJsInstance;
  }
  /** persianjs入口函数 */
  export default function (input: string | number): PersianJsInstance;
}
  • 调整导入语句为默认导入格式:
import persianjs from 'persianjs';
  • 如果编译仍提示导入错误,打开tsconfig.json,在compilerOptions配置项中添加"allowSyntheticDefaultImports": true即可。
  • 调用示例:
const persianText = persianjs(1372).words();
// 输出值:یک هزار و سیصد و هفتاد و دو

方案2:零依赖纯TS实现转换函数

如果不想引入第三方包,可以直接使用以下工具函数,全Angular版本通用,无类型报错:

/**
 * 数字转波斯语单词
 * @param num 输入整数,支持0-999999999999范围
 * @returns 对应波斯语单词字符串
 */
export function numberToPersianWords(num: number): string {
  if (isNaN(num) || !isFinite(num)) return '';
  if (num === 0) return 'صفر';

  const ones = ['', 'یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه'];
  const tens = ['', 'ده', 'بیست', 'سی', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود'];
  const teens = ['ده', 'یازده', 'دوازده', 'سیزده', 'چهارده', 'پانزده', 'شانزده', 'هفده', 'هجده', 'نوزده'];
  const hundreds = ['', 'یکصد', 'دویست', 'سیصد', 'چهارصد', 'پانصد', 'ششصد', 'هفتصد', 'هشتصد', 'نهصد'];
  const units = ['', 'هزار', 'میلیون', 'میلیارد'];

  const numberChunks: number[] = [];
  let positiveNum = Math.abs(Math.floor(num));
  while (positiveNum > 0) {
    numberChunks.push(positiveNum % 1000);
    positiveNum = Math.floor(positiveNum / 1000);
  }

  const convertChunk = (chunk: number): string => {
    const parts: string[] = [];
    const hundred = Math.floor(chunk / 100);
    const ten = Math.floor((chunk % 100) / 10);
    const one = chunk % 10;

    if (hundred > 0) parts.push(hundreds[hundred]);
    if (ten === 1) {
      parts.push(teens[one]);
    } else {
      if (ten > 1) parts.push(tens[ten]);
      if (one > 0) parts.push(ones[one]);
    }
    return parts.join(' و ');
  };

  const resultParts: string[] = [];
  for (let i = numberChunks.length - 1; i >= 0; i--) {
    const currentChunk = numberChunks[i];
    if (currentChunk === 0) continue;
    let chunkText = convertChunk(currentChunk);
    if (i > 0) chunkText += ` ${units[i]}`;
    resultParts.push(chunkText);
  }

  return resultParts.join(' و ');
}

调用方式非常简单,直接引入函数后传入数字即可:

const persianText = numberToPersianWords(1372);
// 输出值:یک هزار و سیصد و هفتاد و دو

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.20 16:15:48