# @vicimpa/rubles — стоимость прописью

В российском документообороте принято писать сумму прописью. Такое должно быть в договорах, актах, расписках и других подобных документах. `@vicimpa/rubles` призван решить эту проблему комплексно, он работает в браузере и на серверной стороне.

#### Установить через [npm](//npmjs.org):

```bash
$ npm i --save @vicimpa/rubles
```

#### Как использовать:

Просто подключаем и используем функцию `format()` =)

```js
const { format } = require('@vicimpa/rubles');

format(10.12)                           // "десять рублей двенадцать копеек"   
```

Функция `format()` первым аргументом принимает число в виде `number` или `string` и возвращает результат в виде `string`. Число в формате `string` может разделяться пробелами, табуляцией, нижним подчеркиванием (`_`) или тире (`-`). 

```js
const { format } = require('@vicimpa/rubles');

format("1_234.54")                      // "одна тысяча двести тридцать четыре рубля пятьдесят четыре копейки"                         
format("1 421 234.43")                  // "один миллион четыреста двадцать одна тысяча двести тридцать четыре рубля сорок три копейки"
format("41-214.94")                     // "сорок одна тысяча двести четырнадцать рублей девяносто четыре копейки" 
```

Вторым аргументом функция может принять нужный Вам формат в виде `string`, в котором вставите строку с переменными в формате `"$var1 $var2"` (привет от бывшего phpШника =D). Чтобы написать вывод строки с большой буквы, используйте имя переменной с большой буквы =D.  Ниже примеры значений. По умолчанию значение аргумента с форматом `"$summString $summCurrency $pennyString $pennyCurrency"`:

```js
const { format } = require('@vicimpa/rubles');

format(0)                               // "ноль рублей ноль копеек"                                                                   
format(10.12)                           // "десять рублей двенадцать копеек"                                                           
format("1_234.54")                      // "одна тысяча двести тридцать четыре рубля пятьдесят четыре копейки"                         
format("1 421 234.43")                  // "один миллион четыреста двадцать одна тысяча двести тридцать четыре рубля сорок три копейки"
format("41-214.94")                     // "сорок одна тысяча двести четырнадцать рублей девяносто четыре копейки"                     
format(123.12, "$input")                // "123.12"                                                                                    
format(123.12, "$summ")                 // "123"                                                                                       
format(123.12, "$summString")           // "сто двадцать три"                                                                          
format(123.12, "$summCurrency")         // "рубля"                                                                                     
format(123.12, "$penny")                // "12"                                                                                        
format(123.12, "$pennyString")          // "двенадцать"                                                                                
format(123.12, "$pennyCurrency")        // "копеек"                                                                                    
format(123.12, "$SummString")           // "Сто двадцать три"                                                                          
format(123.12, "$SummCurrency")         // "Рубля"                                                                                     
format(123.12, "$PennyString")          // "Двенадцать"                                                                                
format(123.12, "$PennyCurrency")        // "Копеек"   
```

#### Дополнения:

Как и в любом деле, есть сопуствующий ущерб =). В данном случае в виде дополнительный функций.

Функция `numberFormat()` необходима для форматирования чисел по заданному формату.
Аргументы:
- input `string | number`. Такой же как и в `format()`
- sep? `string`. Разделитель числительного `1 000`. По умолчанию пробел (`' '`)
- precision? `number`. Точность отображения числа после запятой. По умолчанию `2`
- dot? `string`. Формат запятой. По умолчанию точка (`'.'`)

Примеры:
```js
const { numberFormat } = require('@vicimpa/rubles')

numberFormat(1000)                      // "1 000"     
numberFormat(4123.12, "-")              // "4-123.12"  
numberFormat(1321.123, "/", 2)          // "1/321.12"  
numberFormat(135321.833, "_", 2, ",")   // "135_321,83"
```

Функция `joinWord()` используется для соединения корня с одним из окончаний слова.
Аргументы:
- input `string[]`. Набор из строк, где перая строка корень, остальные окончания.
- index? `number`. Индекс окончания слова в массиве после корня. По умолчанию `0`

Примеры:
```js
const { joinWord } = require('@vicimpa/rubles')

joinWord(["пар","ней","ень","ня"], 0)   // "парней"
joinWord(["пар","ней","ень","ня"], 1)   // "парень"
joinWord(["пар","ней","ень","ня"], 2)   // "парня" 
```

Функция `counterWord()` используется для правильного склонения по числительному.
Аргументы:
- input `string[]`. Набор из строк, где перая строка корень, остальные окончания.
- counter `number`. Число, к которому Вы хотите склонить существительное.

Примеры:
```js
const { counterWord } = require('@vicimpa/rubles')

counterWord(["пар","ней","ень","ня"], 0)        // "парней"
counterWord(["пар","ней","ень","ня"], 1)        // "парень"
counterWord(["пар","ней","ень","ня"], 2)        // "парня" 
counterWord(["пар","ней","ень","ня"], 4)        // "парня" 
counterWord(["пар","ней","ень","ня"], 6)        // "парней"
counterWord(["пар","ней","ень","ня"], 10)       // "парней"
counterWord(["пар","ней","ень","ня"], 12)       // "парней"
counterWord(["пар","ней","ень","ня"], 11)       // "парней"
counterWord(["пар","ней","ень","ня"], 21)       // "парень"
counterWord(["пар","ней","ень","ня"], 32)       // "парня" 
counterWord(["пар","ней","ень","ня"], 101)      // "парень"
```

Функция `parseNumber()` используется парсинга числа из строки и числа на 2 части.
Аргументы:
- input `number | string`. Число, которое Вы хотите распарсить. Число может быть таким же, что и в `format()`

Примеры:
```js
const { parseNumber } = require('@vicimpa/rubles')

parseNumber(1000)               // ["1000"]     
parseNumber(0.123)              // ["0","123"]  
parseNumber("123.12")           // ["123","12"] 
parseNumber("1 520 . 34")       // ["1520","34"]
parseNumber("1_432_123")        // ["1432123"]  
```

Функция `numbersInWords()` используется для перевода числа в строковую транскрипцию.
Аргументы:
- input `number | string`. Число, которое Вы хотите перевести. Число может быть таким же, что и в `format()`. **Данная функция переводит только целую часть!**
- com? `boolean`. Если выставить `true`, то функция просклоняет младший числитель на первом разряде, а не на втором.
- upper? `boolean`. Если выставить `true`, то первая буква строки будет заглавной.

Примеры:
```js
const { numbersInWords } = require('@vicimpa/rubles')

numbersInWords(0)                       // "ноль"                                                              
numbersInWords(10.12)                   // "Десять"                                                            
numbersInWords("1_234.54")              // "Одна тысяча двести тридцать четыре"                                
numbersInWords("1 421 234.43")          // "Один миллион четыреста двадцать одна тысяча двести тридцать четыре"
numbersInWords("41-214.94")             // "Сорок одна тысяча двести четырнадцать"                             
numbersInWords(1)                       // "Один"                                                              
numbersInWords(2)                       // "Два"                                                               
numbersInWords(1, true)                 // "Одна"                                                              
numbersInWords(2, true)                 // "Две"                                                               
numbersInWords("15213.28", false, true) // "Пятнадцать тысяч двести тринадцать"                                
numbersInWords("12351.23", true, true)  // "Двенадцать тысяч триста пятьдесят одна"    
```

Функция `firstUpper()` используется вывода в строке первой заглавной буквы.
Аргументы:
- input `string`. Строка, над которой нужно произвести операцию.

Примеры:
```js
const { firstUpper } = require('@vicimpa/rubles')

firstUpper("привет")    // "Привет"
firstUpper("мой")       // "Мой"   
firstUpper("агА")       // "Ага"     
```

Там еще `testFunction()`, но мне так лень расписывать. Почитайте исходник [тут](/src/lib/testFunction.ts) а примеры [тут](/src/test.ts)

----------------

### Нашли ошибку?

Пожалуйста, создайте тикет — https://github.com/vicimpa/rubles/issues

## Авторы

* [PromiSe####](mailto:vicimpa@ya.ru), [vicimpa.gitgub.io](http://vicimpa.gitgub.io)
* [Алексей Симоненко](mailto:alexey@simonenko.su), [simonenko.su](http://simonenko.su)

## Лицензия

Лицензия MIT, смотрите файл `license.md`.
