Convert numbers to Persian (Farsi) numbers and words. This package provides utilities to convert numbers into Persian digits, words, and ordinal words.
- Convert numbers to Persian digits (۰-۹)
- Convert numbers to Persian words (صفر، یک، دو، ...)
- Convert numbers to Persian ordinal words (اول، دوم، سوم، ...)
- Support for:
- Negative numbers
- Decimal numbers
- Fractions
- Custom separators
- Numbers up to 999
 
npm install num2faimport { numbers } from 'num2fa';
numbers(123); // '۱۲۳'
numbers(-45.67); // '-۴۵٫۶۷'
numbers('1/2'); // '۱/۲'
// Custom separators
numbers(123.45, { decimal_separator: ',' }); // '۱۲۳,۴۵'
numbers('1/2', { fraction_separator: '÷' }); // '۱÷۲'import { words } from 'num2fa';
words(123); // 'یکصد و بیست و سه'
words(-45.67); // 'منفی چهل و پنج و شصت و هفت صدم'
words('1/2'); // 'یک دوم'
// Custom separators
words(123.45, { decimal_separator: ' ممیز ' }); // 'یکصد و بیست و سه ممیز چهل و پنج صدم'
words('1/2', {
  fraction_separator: ' تقسیم بر ',
  ordinal_denominator: false
}); // 'یک تقسیم بر دو'import { ordinalWords } from 'num2fa';
ordinalWords(1); // 'اول'
ordinalWords(2); // 'دوم'
ordinalWords(23); // 'بیست و سوم'
ordinalWords(-45); // 'منفی چهل و پنجم'import { numbers, words, ordinalWords } from 'num2fa';
// Price formatting
const price = 1234567.89;
console.log(numbers(price)); // '۱٬۲۳۴٬۵۶۷٫۸۹'
console.log(words(price)); // 'یک میلیون و دویست و سی و چهار هزار و پانصد و شصت و هفت و هشتاد و نه صدم'
// Educational content
const lesson = 12;
console.log(ordinalWords(lesson)); // 'دوازدهم'
console.log(words(lesson)); // 'دوازده'
// Fractions in recipes
const fraction = '3/4';
console.log(numbers(fraction)); // '۳/۴'
console.log(words(fraction)); // 'سه چهارم'
console.log(words(fraction, {
  fraction_separator: ' از ',
  ordinal_denominator: false
})); // 'سه از چهار'
// Custom formatting
const decimal = 45.67;
console.log(numbers(decimal, {
  decimal_separator: '/',
  negative: ')',
  positive: '('
})); // '(۴۵/۶۷'
// Negative numbers
console.log(words(-42)); // 'منفی چهل و دو'
console.log(ordinalWords(-42)); // 'منفی چهل و دوم'
// Multiple options
const amount = 123.45;
console.log(words(amount, {
  decimal_separator: ' ممیز ',
  positive: 'مثبت ',
  negative: 'منفی ',
})); // 'مثبت یکصد و بیست و سه ممیز چهل و پنج صدم'
// Zero handling
console.log(numbers(0)); // '۰'
console.log(words(0)); // 'صفر'
console.log(ordinalWords(0)); // 'صفرم'
// Teen numbers (11-19)
for (let i = 11; i <= 19; i++) {
  console.log(words(i)); // 'یازده', 'دوازده', 'سیزده', ...
}
// Decimal places
console.log(words(1.1)); // 'یک و یک دهم'
console.log(words(1.01)); // 'یک و یک صدم'
console.log(words(1.001)); // 'یک و یک هزارم'import React from 'react';
import { numbers, words } from 'num2fa';
interface PriceProps {
  amount: number;
  showWords?: boolean;
}
const PersianPrice: React.FC<PriceProps> = ({ amount, showWords = false }) => {
  const formattedNumber = numbers(amount, {
    decimal_separator: '/',
    negative: '-'
  });
  return (
    <div className="price">
      <span className="digits">{formattedNumber} تومان</span>
      {showWords && (
        <span className="words">
          {words(amount)} تومان
        </span>
      )}
    </div>
  );
};
// Usage
function App() {
  return (
    <div>
      <PersianPrice amount={1234.56} showWords={true} />
      {/* Outputs:
          ۱۲۳۴/۵۶ تومان
          یک هزار و دویست و سی و چهار و پنجاه و شش صدم تومان
      */}
    </div>
  );
}import express from 'express';
import { numbers, words, ordinalWords } from 'num2fa';
const app = express();
app.use(express.json());
app.post('/convert', (req, res) => {
  const { number, type, options } = req.body;
  try {
    let result;
    switch (type) {
      case 'numbers':
        result = numbers(number, options);
        break;
      case 'words':
        result = words(number, options);
        break;
      case 'ordinal':
        result = ordinalWords(number, options);
        break;
      default:
        throw new Error('Invalid conversion type');
    }
    res.json({ success: true, result });
  } catch (error) {
    res.status(400).json({
      success: false,
      error: error.message
    });
  }
});
// Usage:
// POST /convert
// {
//   "number": 123.45,
//   "type": "words",
//   "options": {
//     "decimal_separator": " ممیز "
//   }
// }Convert numbers to Persian digits.
Options:
- decimal_separator: Separator for decimal numbers (default: '٫')
- negative: Prefix for negative numbers (default: '-')
- positive: Prefix for positive numbers (default: '')
- fraction_separator: Separator for fractions (default: '/')
Convert numbers to Persian words.
Options:
- decimal_separator: Separator for decimal numbers (default: ' و ')
- negative: Prefix for negative numbers (default: 'منفی ')
- positive: Prefix for positive numbers (default: '')
- fraction_separator: Separator for fractions (default: ' ')
- ordinal_denominator: Whether to make fraction denominators ordinal (default: true)
Convert numbers to Persian ordinal words.
Options:
- negative: Prefix for negative numbers (default: 'منفی ')
- positive: Prefix for positive numbers (default: '')
This project is licensed under the AGPL-3.0 License - see the LICENSE.txt file for details.
Contributions are welcome! Please see our Contributing Guidelines for details.