num2words_plus 1.0.0 copy "num2words_plus: ^1.0.0" to clipboard
num2words_plus: ^1.0.0 copied to clipboard

Convert numbers to words for accounting, invoicing, and banking apps. Supports Nepali and English with the Nepali numbering system. Offline-first, zero-dependency, Flutter and Dart compatible.

num2words_plus #


Pub License Web Demo GitHub code size in bytes GitHub stars

num2words_plus converts numbers to words for Dart and Flutter apps that need offline, deterministic wording for accounting, invoicing, banking, receipts, and other money-adjacent workflows.

Version 1.0.0 supports Nepali and English with Nepali numbering-system scale names such as लाख, करोड, अर्ब, lakh, crore, and arab.

Features #

  • Nepali and English output in v1.0.0.
  • Nepali numbering-system grouping and scale names.
  • Callable converter API: converter(1234).
  • Validated string API: converter.parse('1234.56').
  • Modes for standard numbers, ordinals, years, phone/ID digits, and English cheque/check formatting.
  • Optional currency unit and subunit labels.
  • Domain-specific exceptions for format, range, and mode errors.
  • Zero runtime dependencies.

Feature Comparison #

Feature num2words_plus
Nepali language
English language
Nepali numbering system
Offline conversion
Zero runtime dependencies
Custom currency units
cheque formatting
Ordinals
Year formatting
Phone digit spelling

Installation #

Add the package to your pubspec.yaml:

dependencies:
  num2words_plus: ^1.0.0

Then import it:

import 'package:num2words_plus/num2words_plus.dart';

Quick Start #

const nepali = Num2WordsPlus();

print(nepali(1234));
// एक हजार दुई सय चौँतीस

print(nepali.parse('1234.56'));
// एक हजार दुई सय चौँतीस दशमलव पाँच छ

const english = Num2WordsPlus(language: Num2WordsLanguage.english);

print(english(100000));
// one lakh

print(english(10000000));
// one crore

Currency Units #

Standard mode can include currency units when you provide primaryUnit and secondaryUnit. Subunits are always spelled out in words, never as fraction notation.

const nepaliMoney = Num2WordsPlus(
  primaryUnit: 'रुपैयाँ',
  secondaryUnit: 'पैसा',
);

print(nepaliMoney.parse('1234.56'));
// एक हजार दुई सय चौँतीस रुपैयाँ, छपन्न पैसा

const englishMoney = Num2WordsPlus(
  language: Num2WordsLanguage.english,
  primaryUnit: 'rupees',
  secondaryUnit: 'paisa',
);

print(englishMoney.parse('1234.56'));
// one thousand two hundred thirty-four rupees and fifty-six paisa

Modes #

Standard #

Num2WordsMode.standard is the default mode.

const converter = Num2WordsPlus(language: Num2WordsLanguage.english);

print(converter(123456789));
// twelve crore thirty-four lakh fifty-six thousand seven hundred eighty-nine

Ordinal #

const nepaliOrdinal = Num2WordsPlus(mode: Num2WordsMode.ordinal);

print(nepaliOrdinal(1));
// पहिलो

print(nepaliOrdinal(21));
// एक्काइसौं

const englishOrdinal = Num2WordsPlus(
  language: Num2WordsLanguage.english,
  mode: Num2WordsMode.ordinal,
);

print(englishOrdinal(21));
// twenty-first

Year #

const nepaliYear = Num2WordsPlus(mode: Num2WordsMode.year);

print(nepaliYear(2077));
// दुई हजार सतहत्तर

const englishYear = Num2WordsPlus(
  language: Num2WordsLanguage.english,
  mode: Num2WordsMode.year,
);

print(englishYear(2024));
// two thousand twenty-four

Phone / ID #

Phone mode spells each digit independently and ignores letterCase.

const phone = Num2WordsPlus(mode: Num2WordsMode.phone);

print(phone.parse('9841234567'));
// नौ आठ चार एक दुई तीन चार पाँच छ सात

Check #

Check mode is English-only in v1.0.0. Using it with Nepali throws Num2WordsModeException.

const check = Num2WordsPlus(
  language: Num2WordsLanguage.english,
  letterCase: Num2WordsLettercase.titlecase,
  mode: Num2WordsMode.check,
);

print(check.parse('1234.56'));
// One Thousand Two Hundred Thirty-Four Rupees and Fifty-Six Paisa

Letter Case #

const uppercase = Num2WordsPlus(
  language: Num2WordsLanguage.english,
  letterCase: Num2WordsLettercase.uppercase,
);

print(uppercase(21));
// TWENTY-ONE

Supported values:

  • Num2WordsLettercase.lowercase
  • Num2WordsLettercase.uppercase
  • Num2WordsLettercase.titlecase
  • Num2WordsLettercase.sentencecase

Validation and Errors #

All string input is validated before conversion.

try {
  const converter = Num2WordsPlus();
  converter.parse('1.2.3');
} on Num2WordsFormatException catch (error) {
  print(error.message);
}

Exception types:

  • Num2WordsFormatException: empty strings, negative numbers, signed input, non-numeric characters, multiple decimal points, or empty currency units.
  • Num2WordsRangeException: integer part exceeds 18 digits.
  • Num2WordsModeException: unsupported language or mode/language combination, such as check mode with Nepali.

Every exception message includes the invalid input, the violated rule, and an example of valid input.

Supported Range #

The integer part may contain up to 18 normalized digits. Leading zeroes do not count against the limit.

const converter = Num2WordsPlus(language: Num2WordsLanguage.english);

print(converter.parse('100000000000000000'));
// one shankh

Inputs with 19 or more normalized integer digits throw Num2WordsRangeException.

Language Support #

Language v1.0.0 status
Nepali Supported
English Supported

Development #

dart pub get
dart analyze
dart test

The package is built with Dart SDK >=3.2.0 <4.0.0.

Flutter Web Demo #

The example/ directory contains a Flutter web app for trying the converter interactively.

cd example
flutter pub get
flutter run -d web-server

Documentation #

License #

See LICENSE.

0
likes
150
points
7
downloads

Documentation

API reference

Publisher

verified publisheravoloft.com

Weekly Downloads

Convert numbers to words for accounting, invoicing, and banking apps. Supports Nepali and English with the Nepali numbering system. Offline-first, zero-dependency, Flutter and Dart compatible.

Repository (GitHub)
View/report issues
Contributing

Topics

#number #words #nepali #english #currency

License

BSD-3-Clause (license)

More

Packages that depend on num2words_plus