Rubli.js
Форматирование рублёвых сумм для интерфейсов: разряды, копейки, знак валюты и склонения. Один килобайт, без зависимостей, работает в браузере и Node.
Установка
npm install rubli
Или подключите файл напрямую:
<script src="/vendor/rubli.min.js"></script>
Быстрый старт
import { rub } from "rubli";
rub(1234567.5); // "1 234 567,50 ₽"
rub(990, { kopecks: false }); // "990 ₽"
rub(-1500); // "−1 500 ₽"
space.API
rub(amount, options?)
Принимает число или строку, возвращает строку. Копейки округляются до двух знаков по правилам банковского округления.
parse(text)
Обратная операция: parse("1 234,50 ₽") → 1234.5. Понимает пробелы, запятую и точку, знак валюты в любом месте.
words(amount)
Сумма прописью для документов: words(1500) → "одна тысяча пятьсот рублей 00 копеек".
Intl.NumberFormat.Параметры
| Параметр | По умолчанию | Что делает |
|---|---|---|
kopecks | true | Показывать копейки. "auto" — только если не ноль. |
sign | "₽" | Знак валюты: "₽", "руб." или пустая строка. |
space | " " | Разделитель разрядов. |
minus | "−" | Символ для отрицательных сумм (типографский минус). |
Склонения
Функция plural(n, ["рубль", "рубля", "рублей"]) возвращает нужную форму: 1 рубль, 2 рубля, 5 рублей, 21 рубль, 111 рублей.
plural(3, ["товар", "товара", "товаров"]); // "товара"
Частые вопросы
Почему не Intl.NumberFormat?
Он подходит, но даёт «1 234,50 ₽» с обычным пробелом и не умеет прописью и склонения. Rubli.js — тонкая надстройка ровно для этих трёх задач.
Поддерживаются ли другие валюты?
Нет, и не планируются: библиотека намеренно узкая. Для мультивалютности используйте Intl.