На создание библиотеки для удобного форматирования чисел программиста и веб-дизайнера Адама Дрэйпера вдохновила аналогичная библиотека для даты и времени —
moment.js. Numeral.js позволяет задавать число знаков после запятой, символы-разделители для дробной части и групп разрядов, формат представления валют, процентов, времени, аббревиатуры для миллионов, миллиардов, мегабайтов и т.п. Кроме того, можно восстанавливать числовые значения из существующего строкового представления. Библиотека распространяется под лицензией MIT.
Numeral работает в браузерах и под Node.js. Подключение библиотеки:
В браузере из cdnjs.com:
<script src="//cdnjs.cloudflare.com/ajax/libs/numeral.js/1.4.1/numeral.min.js"></script>
В Node.js:
npm install numeral
var numeral = require('numeral');
Использование:
var string = numeral(1000).format('0,0'); // '1,000'
Числа
| Число |
Формат |
Строка |
| 10000 |
'0,0.0000' |
10,000.0000 |
| 10000.23 |
'0,0' |
10,000 |
| -10000 |
'0,0.0' |
-10,000.0 |
| 10000.1234 |
'0.000' |
10000.123 |
| 10000.1234 |
'0[.]00000' |
10000.12340 |
| -10000 |
'(0,0.0000)' |
(10,000.0000) |
| -0.23 |
'.00' |
-.23 |
| -0.23 |
'(.00)' |
(.23) |
| 0.23 |
'0.00000' |
0.23000 |
| 0.23 |
'0.0[0000]' |
0.23 |
| 1230974 |
'0.0a' |
1.2m |
| 1460 |
'0 a' |
1 k |
| -104000 |
'0a' |
-104k |
| 1 |
'0o' |
1st |
| 52 |
'0o' |
52nd |
| 23 |
'0o' |
23rd |
| 100 |
'0o' |
100th |
Валюта
| Число |
Формат |
Строка |
| 1000.234 |
'$0,0.00' |
$1,000.23 |
| 1000.2 |
'0,0[.]00 $' |
1,000.20 $ |
| 1001 |
'$ 0,0[.]00' |
$ 1,001 |
| -1000.234 |
'($0,0)' |
($1,000) |
| -1000.234 |
'$0.00' |
-$1000.23 |
| 1230974 |
'($ 0.00 a)' |
$ 1.23 m |
Байты
| Число |
Формат |
Строка |
| 100 |
'0b' |
100B |
| 2048 |
'0 b' |
2 KB |
| 7884486213 |
'0.0b' |
7.3GB |
| 3467479682787 |
'0.000 b' |
3.154 TB |
Проценты
| Число |
Формат |
Строка |
| 1 |
'0%' |
100% |
| 0.974878234 |
'0.000%' |
97.488% |
| -0.43 |
'0 %' |
-43 % |
| 0.43 |
'(0.000 %)' |
43.000 % |
Время
| Число |
Формат |
Строка |
| 25 |
'00:00:00' |
0:00:25 |
| 238 |
'00:00:00' |
0:03:58 |
| 63846 |
'00:00:00' |
17:44:06 |
Расформатирование
var string = numeral().unformat('($10,000.00)'); // '-10000'
| Строка |
Функция |
Число |
| '10,000.123' |
.unformat('10,000.123') |
10000.123 |
| '0.12345' |
.unformat('0.12345') |
0.12345 |
| '1.23m' |
.unformat('1.23m') |
1230000 |
| '23rd' |
.unformat('23rd') |
23 |
| '$10,000.00' |
.unformat('$10,000.00') |
10000 |
| '100B' |
.unformat('100B') |
100 |
| '3.154TB' |
.unformat('3.154TB') |
3467859674006 |
| '-76%' |
.unformat('-76%') |
-0.76 |
| '2:23:57' |
.unformat('2:23:57') |
8637 |
Арифметика
var number = numeral(1000);
var added = number.add(10); // 1010
| До |
Функция |
После |
| 1000 |
.add(100) |
1100 |
| 1100 |
.subtract(100) |
1000 |
| 1000 |
.multiply(100) |
100000 |
| 100000 |
.divide(100) |
1000 |
Форматирование нулевого значения
var number = numeral(0);
numeral.zeroFormat('N/A');
var zero = number.format('0.0') // 'N/A'
Работа с объектами number
Получение числового значения
var number = numeral(1000);
var string = number.format('0,0'); // '1,000'
var value = number.value(); // 1000
Установка значения
var number = numeral();
number.set(1000);
var value = number.value(); // 1000
Разность
var number = numeral(1000),
value = 100;
var difference = number.difference(value); // 900
Клонирование
var a = numeral(1000);
var b = numeral(a);
var c = a.clone();
var aVal = a.set(2000).value(); // 2000
var bVal = b.value(); // 1000
var cVal = c.add(10).value(); // 1010
Локализация
В библиотеку встроены базовые функции локализации. Уже есть рудиментарная поддержка русского языка.
// load a language
numeral.language('fr', {
delimiters: {
thousands: ' ',
decimal: ','
},
abbreviations: {
thousand: 'k',
million: 'm'
},
ordinal : function (number) {
return number === 1 ? 'er' : 'ème';
},
currency: {
symbol: '€'
}
});
// switch between languages
numeral.language('fr');
Ссылки
Гитхаб.
Официальный сайт.