n2words 1.12.2 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +2 -2
- package/README.md +3 -2
- package/bench.mjs +94 -0
- package/dist/n2words.js +1 -1
- package/examples/node.mjs +10 -0
- package/lib/classes/AbstractLanguage.mjs +151 -0
- package/lib/classes/BaseLanguage.mjs +174 -0
- package/lib/i18n/AR.mjs +19 -9
- package/lib/i18n/AZ.mjs +62 -0
- package/lib/i18n/CZ.mjs +78 -69
- package/lib/i18n/DE.mjs +54 -49
- package/lib/i18n/DK.mjs +56 -50
- package/lib/i18n/EN.mjs +64 -53
- package/lib/i18n/ES.mjs +61 -55
- package/lib/i18n/FA.mjs +74 -63
- package/lib/i18n/FR.mjs +52 -47
- package/lib/i18n/HE.mjs +75 -23
- package/lib/i18n/HR.mjs +82 -70
- package/lib/i18n/HU.mjs +80 -75
- package/lib/i18n/ID.mjs +27 -20
- package/lib/i18n/IT.mjs +26 -17
- package/lib/i18n/KO.mjs +36 -31
- package/lib/i18n/LT.mjs +80 -67
- package/lib/i18n/LV.mjs +68 -57
- package/lib/i18n/NL.mjs +72 -61
- package/lib/i18n/NO.mjs +56 -51
- package/lib/i18n/PL.mjs +79 -67
- package/lib/i18n/PT.mjs +50 -44
- package/lib/i18n/RU.mjs +152 -122
- package/lib/i18n/SR.mjs +82 -70
- package/lib/i18n/TR.mjs +54 -362
- package/lib/i18n/UK.mjs +13 -6
- package/lib/i18n/VI.mjs +31 -24
- package/lib/i18n/ZH.mjs +38 -32
- package/lib/n2words.mjs +33 -103
- package/package.json +18 -11
- package/webpack.config.js +1 -1
- package/lib/classes/N2WordsAbs.mjs +0 -72
- package/lib/classes/N2WordsBase.mjs +0 -105
package/lib/i18n/PT.mjs
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseLanguage from '../classes/BaseLanguage.mjs';
|
|
2
2
|
|
|
3
|
-
export class N2WordsPT extends
|
|
3
|
+
export class N2WordsPT extends BaseLanguage {
|
|
4
4
|
constructor() {
|
|
5
|
-
super(
|
|
5
|
+
super({
|
|
6
|
+
negativeWord: 'menos',
|
|
7
|
+
separatorWord: 'vírgula',
|
|
8
|
+
zero: 'zero'
|
|
9
|
+
},[
|
|
10
|
+
[1000000000000000000000000n, 'quatrilião'],
|
|
11
|
+
[1000000000000000000n, 'trilião'],
|
|
12
|
+
[1000000000000n, 'bilião'],
|
|
13
|
+
[1000000n, 'milião'],
|
|
14
|
+
[1000n, 'mil'],
|
|
15
|
+
[100n, 'cem'],
|
|
16
|
+
[90n, 'noventa'],
|
|
17
|
+
[80n, 'oitenta'],
|
|
18
|
+
[70n, 'setenta'],
|
|
19
|
+
[60n, 'sessenta'],
|
|
20
|
+
[50n, 'cinquenta'],
|
|
21
|
+
[40n, 'quarenta'],
|
|
22
|
+
[30n, 'trinta'],
|
|
23
|
+
[20n, 'vinte'],
|
|
24
|
+
[19n, 'dezanove'],
|
|
25
|
+
[18n, 'dezoito'],
|
|
26
|
+
[17n, 'dezassete'],
|
|
27
|
+
[16n, 'dezasseis'],
|
|
28
|
+
[15n, 'quinze'],
|
|
29
|
+
[14n, 'catorze'],
|
|
30
|
+
[13n, 'treze'],
|
|
31
|
+
[12n, 'doze'],
|
|
32
|
+
[11n, 'onze'],
|
|
33
|
+
[10n, 'dez'],
|
|
34
|
+
[9n, 'nove'],
|
|
35
|
+
[8n, 'oito'],
|
|
36
|
+
[7n, 'sete'],
|
|
37
|
+
[6n, 'seis'],
|
|
38
|
+
[5n, 'cinco'],
|
|
39
|
+
[4n, 'quatro'],
|
|
40
|
+
[3n, 'três'],
|
|
41
|
+
[2n, 'dois'],
|
|
42
|
+
[1n, 'um'],
|
|
43
|
+
[0n, 'zero']
|
|
44
|
+
]);
|
|
6
45
|
|
|
7
|
-
this.negativeWord = 'menos';
|
|
8
|
-
this.separatorWord = 'vírgula';
|
|
9
|
-
this.zero = 'zero';
|
|
10
|
-
this.cards = [
|
|
11
|
-
{ '1000000000000000000000000': 'quatrilião' },
|
|
12
|
-
{ 1000000000000000000: 'trilião' },
|
|
13
|
-
{ 1000000000000: 'bilião' },
|
|
14
|
-
{ 1000000: 'milião' },
|
|
15
|
-
{ 1000: 'mil' },
|
|
16
|
-
{ 100: 'cem' },
|
|
17
|
-
{ 90: 'noventa' },
|
|
18
|
-
{ 80: 'oitenta' },
|
|
19
|
-
{ 70: 'setenta' },
|
|
20
|
-
{ 60: 'sessenta' },
|
|
21
|
-
{ 50: 'cinquenta' },
|
|
22
|
-
{ 40: 'quarenta' },
|
|
23
|
-
{ 30: 'trinta' },
|
|
24
|
-
{ 20: 'vinte' },
|
|
25
|
-
{ 19: 'dezanove' },
|
|
26
|
-
{ 18: 'dezoito' },
|
|
27
|
-
{ 17: 'dezassete' },
|
|
28
|
-
{ 16: 'dezasseis' },
|
|
29
|
-
{ 15: 'quinze' },
|
|
30
|
-
{ 14: 'catorze' },
|
|
31
|
-
{ 13: 'treze' },
|
|
32
|
-
{ 12: 'doze' },
|
|
33
|
-
{ 11: 'onze' },
|
|
34
|
-
{ 10: 'dez' },
|
|
35
|
-
{ 9: 'nove' },
|
|
36
|
-
{ 8: 'oito' },
|
|
37
|
-
{ 7: 'sete' },
|
|
38
|
-
{ 6: 'seis' },
|
|
39
|
-
{ 5: 'cinco' },
|
|
40
|
-
{ 4: 'quatro' },
|
|
41
|
-
{ 3: 'três' },
|
|
42
|
-
{ 2: 'dois' },
|
|
43
|
-
{ 1: 'um' },
|
|
44
|
-
{ 0: 'zero' }
|
|
45
|
-
];
|
|
46
46
|
this.hundreds = {
|
|
47
47
|
1: 'cento',
|
|
48
48
|
2: 'duzentos',
|
|
@@ -102,6 +102,12 @@ export class N2WordsPT extends N2WordsBase {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Converts a value to cardinal (written) form.
|
|
107
|
+
* @param {number|string} value Number to be convert.
|
|
108
|
+
* @throws {Error} Value cannot be invalid.
|
|
109
|
+
* @returns {string} Value in cardinal (written) format.
|
|
110
|
+
*/
|
|
111
|
+
export default function(value) {
|
|
112
|
+
return new N2WordsPT().floatToCardinal(value);
|
|
107
113
|
}
|
package/lib/i18n/RU.mjs
CHANGED
|
@@ -1,166 +1,196 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export class N2WordsRU extends
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
1
|
+
import AbstractLanguage from '../classes/AbstractLanguage.mjs';
|
|
2
|
+
|
|
3
|
+
export class N2WordsRU extends AbstractLanguage {
|
|
4
|
+
feminine = false;
|
|
5
|
+
|
|
6
|
+
ones = {
|
|
7
|
+
1: 'один',
|
|
8
|
+
2: 'два',
|
|
9
|
+
3: 'три',
|
|
10
|
+
4: 'четыре',
|
|
11
|
+
5: 'пять',
|
|
12
|
+
6: 'шесть',
|
|
13
|
+
7: 'семь',
|
|
14
|
+
8: 'восемь',
|
|
15
|
+
9: 'девять'
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
onesFeminine = {
|
|
19
|
+
1: 'одна',
|
|
20
|
+
2: 'две',
|
|
21
|
+
3: 'три',
|
|
22
|
+
4: 'четыре',
|
|
23
|
+
5: 'пять',
|
|
24
|
+
6: 'шесть',
|
|
25
|
+
7: 'семь',
|
|
26
|
+
8: 'восемь',
|
|
27
|
+
9: 'девять'
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
tens = {
|
|
31
|
+
0: 'десять',
|
|
32
|
+
1: 'одиннадцать',
|
|
33
|
+
2: 'двенадцать',
|
|
34
|
+
3: 'тринадцать',
|
|
35
|
+
4: 'четырнадцать',
|
|
36
|
+
5: 'пятнадцать',
|
|
37
|
+
6: 'шестнадцать',
|
|
38
|
+
7: 'семнадцать',
|
|
39
|
+
8: 'восемнадцать',
|
|
40
|
+
9: 'девятнадцать'
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
twenties = {
|
|
44
|
+
2: 'двадцать',
|
|
45
|
+
3: 'тридцать',
|
|
46
|
+
4: 'сорок',
|
|
47
|
+
5: 'пятьдесят',
|
|
48
|
+
6: 'шестьдесят',
|
|
49
|
+
7: 'семьдесят',
|
|
50
|
+
8: 'восемьдесят',
|
|
51
|
+
9: 'девяносто'
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
hundreds = {
|
|
55
|
+
1: 'сто',
|
|
56
|
+
2: 'двести',
|
|
57
|
+
3: 'триста',
|
|
58
|
+
4: 'четыреста',
|
|
59
|
+
5: 'пятьсот',
|
|
60
|
+
6: 'шестьсот',
|
|
61
|
+
7: 'семьсот',
|
|
62
|
+
8: 'восемьсот',
|
|
63
|
+
9: 'девятьсот'
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
thousands = {
|
|
67
|
+
1: ['тысяча', 'тысячи', 'тысяч'], // 10^ 3
|
|
68
|
+
2: ['миллион', 'миллиона', 'миллионов'], // 10^ 6
|
|
69
|
+
3: ['миллиард', 'миллиарда', 'миллиардов'], // 10^ 9
|
|
70
|
+
4: ['триллион', 'триллиона', 'триллионов'], // 10^ 12
|
|
71
|
+
5: ['квадриллион', 'квадриллиона', 'квадриллионов'], // 10^ 15
|
|
72
|
+
6: ['квинтиллион', 'квинтиллиона', 'квинтиллионов'], // 10^ 18
|
|
73
|
+
7: ['секстиллион', 'секстиллиона', 'секстиллионов'], // 10^ 21
|
|
74
|
+
8: ['септиллион', 'септиллиона', 'септиллионов'], // 10^ 24
|
|
75
|
+
9: ['октиллион', 'октиллиона', 'октиллионов'], // 10^ 27
|
|
76
|
+
10: ['нониллион', 'нониллиона', 'нониллионов'], // 10^ 30
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
constructor(options = {}) {
|
|
80
|
+
super(Object.assign({
|
|
81
|
+
negativeWord: 'минус',
|
|
82
|
+
separatorWord: 'запятая',
|
|
83
|
+
zero: 'ноль'
|
|
84
|
+
}, options));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
toCardinal(number) {
|
|
88
|
+
if (number == 0) {
|
|
89
|
+
return this.zero;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const words = [];
|
|
93
|
+
|
|
94
|
+
const chunks = this.splitByX(number.toString(), 3);
|
|
95
|
+
|
|
96
|
+
let i = chunks.length;
|
|
97
|
+
|
|
98
|
+
for (let j = 0; j < chunks.length; j++) {
|
|
99
|
+
const x = chunks[j];
|
|
100
|
+
let ones = [];
|
|
101
|
+
i = i - 1;
|
|
102
|
+
|
|
103
|
+
if (x == 0) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const [n1, n2, n3] = this.getDigits(x);
|
|
108
|
+
|
|
109
|
+
if (n3 > 0) {
|
|
110
|
+
words.push(this.hundreds[n3]);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (n2 > 1) {
|
|
114
|
+
words.push(this.twenties[n2]);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (n2 == 1) {
|
|
118
|
+
words.push(this.tens[n1]);
|
|
119
|
+
} else if (n1 > 0) {
|
|
120
|
+
ones = (i == 1 || this.feminine && i == 0) ? this.onesFeminine : this.ones;
|
|
121
|
+
words.push(ones[n1]);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (i > 0) {
|
|
125
|
+
words.push(this.pluralize(x, this.thousands[i]));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return words.join(' ');
|
|
78
130
|
}
|
|
79
131
|
|
|
80
132
|
splitByX(n, x, formatInt = true) {
|
|
81
133
|
const results = [];
|
|
82
134
|
const l = n.length;
|
|
83
135
|
let result;
|
|
136
|
+
|
|
84
137
|
if (l > x) {
|
|
85
138
|
const start = l % x;
|
|
139
|
+
|
|
86
140
|
if (start > 0) {
|
|
87
141
|
result = n.slice(0, start);
|
|
142
|
+
|
|
88
143
|
if (formatInt) {
|
|
89
|
-
results.push(
|
|
144
|
+
results.push(BigInt(result));
|
|
90
145
|
} else {
|
|
91
146
|
results.push(result);
|
|
92
147
|
}
|
|
93
148
|
}
|
|
149
|
+
|
|
94
150
|
for (let i = start; i < l; i += x) {
|
|
95
151
|
result = n.slice(i, i + x);
|
|
152
|
+
|
|
96
153
|
if (formatInt) {
|
|
97
|
-
results.push(
|
|
154
|
+
results.push(BigInt(result));
|
|
98
155
|
} else {
|
|
99
156
|
results.push(result);
|
|
100
157
|
}
|
|
101
158
|
}
|
|
102
159
|
} else {
|
|
103
160
|
if (formatInt) {
|
|
104
|
-
results.push(
|
|
161
|
+
results.push(BigInt(n));
|
|
105
162
|
} else {
|
|
106
163
|
results.push(n);
|
|
107
164
|
}
|
|
108
165
|
}
|
|
166
|
+
|
|
109
167
|
return results;
|
|
110
168
|
}
|
|
111
169
|
|
|
112
|
-
getDigits(
|
|
113
|
-
const a = Array.from(
|
|
114
|
-
return a.map(e =>
|
|
170
|
+
getDigits(value) {
|
|
171
|
+
const a = Array.from(value.toString().padStart(3, '0').slice(-3)).reverse();
|
|
172
|
+
return a.map(e => BigInt(e));
|
|
115
173
|
}
|
|
116
174
|
|
|
117
175
|
pluralize(n, forms) {
|
|
118
176
|
let form = 2;
|
|
119
|
-
if ((n %
|
|
120
|
-
if (n %
|
|
177
|
+
if ((n % 100n < 10n) || (n % 100n > 20n)) {
|
|
178
|
+
if (n % 10n == 1n) {
|
|
121
179
|
form = 0;
|
|
122
|
-
} else if ((n %
|
|
180
|
+
} else if ((n % 10n < 5n) && (n % 10n > 1n)) {
|
|
123
181
|
form = 1;
|
|
124
182
|
}
|
|
125
183
|
}
|
|
126
184
|
return forms[form];
|
|
127
185
|
}
|
|
128
|
-
|
|
129
|
-
toCardinal(number) {
|
|
130
|
-
if (parseInt(number) == 0) {
|
|
131
|
-
return this.zero;
|
|
132
|
-
}
|
|
133
|
-
const words = [];
|
|
134
|
-
const chunks = this.splitByX(JSON.stringify(number), 3);
|
|
135
|
-
let i = chunks.length;
|
|
136
|
-
for (let j = 0; j < chunks.length; j++) {
|
|
137
|
-
const x = chunks[j];
|
|
138
|
-
let ones = [];
|
|
139
|
-
i = i - 1;
|
|
140
|
-
if (x == 0) {
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
const [n1, n2, n3] = this.getDigits(x);
|
|
144
|
-
if (n3 > 0) {
|
|
145
|
-
words.push(this.hundreds[n3]);
|
|
146
|
-
}
|
|
147
|
-
if (n2 > 1) {
|
|
148
|
-
words.push(this.twenties[n2]);
|
|
149
|
-
}
|
|
150
|
-
if (n2 == 1) {
|
|
151
|
-
words.push(this.tens[n1]);
|
|
152
|
-
} else if (n1 > 0) {
|
|
153
|
-
ones = (i == 1 || this.feminine && i == 0) ? this.onesFeminine : this.ones;
|
|
154
|
-
words.push(ones[n1]);
|
|
155
|
-
}
|
|
156
|
-
if (i > 0) {
|
|
157
|
-
words.push(this.pluralize(x, this.thousands[i]));
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return words.join(' ');
|
|
161
|
-
}
|
|
162
186
|
}
|
|
163
187
|
|
|
164
|
-
|
|
165
|
-
|
|
188
|
+
/**
|
|
189
|
+
* Converts a value to cardinal (written) form.
|
|
190
|
+
* @param {number|string} value Number to be convert.
|
|
191
|
+
* @throws {Error} Value cannot be invalid.
|
|
192
|
+
* @returns {string} Value in cardinal (written) format.
|
|
193
|
+
*/
|
|
194
|
+
export default function(value) {
|
|
195
|
+
return new N2WordsRU().floatToCardinal(value);
|
|
166
196
|
}
|
package/lib/i18n/SR.mjs
CHANGED
|
@@ -1,78 +1,84 @@
|
|
|
1
1
|
import {N2WordsRU} from './RU.mjs';
|
|
2
2
|
|
|
3
3
|
export class N2WordsSR extends N2WordsRU {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
ones = {
|
|
5
|
+
1: ['jedan', 'jedna'],
|
|
6
|
+
2: ['dva', 'dve'],
|
|
7
|
+
3: ['tri', 'tri'],
|
|
8
|
+
4: ['četiri', 'četiri'],
|
|
9
|
+
5: ['pet', 'pet'],
|
|
10
|
+
6: ['šest', 'šest'],
|
|
11
|
+
7: ['sedam', 'sedam'],
|
|
12
|
+
8: ['osam', 'osam'],
|
|
13
|
+
9: ['devet', 'devet']
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
tens = {
|
|
17
|
+
0: 'deset',
|
|
18
|
+
1: 'jedanaest',
|
|
19
|
+
2: 'dvanaest',
|
|
20
|
+
3: 'trinaest',
|
|
21
|
+
4: 'četrnaest',
|
|
22
|
+
5: 'petnaest',
|
|
23
|
+
6: 'šesnaest',
|
|
24
|
+
7: 'sedamnaest',
|
|
25
|
+
8: 'osamnaest',
|
|
26
|
+
9: 'devetnaest'
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
twenties = {
|
|
30
|
+
2: 'dvadeset',
|
|
31
|
+
3: 'trideset',
|
|
32
|
+
4: 'četrdeset',
|
|
33
|
+
5: 'pedeset',
|
|
34
|
+
6: 'šezdeset',
|
|
35
|
+
7: 'sedamdeset',
|
|
36
|
+
8: 'osamdeset',
|
|
37
|
+
9: 'devedeset'
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
hundreds = {
|
|
41
|
+
1: 'sto',
|
|
42
|
+
2: 'dvesta',
|
|
43
|
+
3: 'trista',
|
|
44
|
+
4: 'četiristo',
|
|
45
|
+
5: 'petsto',
|
|
46
|
+
6: 'šesto',
|
|
47
|
+
7: 'sedamsto',
|
|
48
|
+
8: 'osamsto',
|
|
49
|
+
9: 'devetsto'
|
|
50
|
+
};
|
|
6
51
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
7: 'sedamnaest',
|
|
30
|
-
8: 'osamnaest',
|
|
31
|
-
9: 'devetnaest'
|
|
32
|
-
};
|
|
33
|
-
this.twenties = {
|
|
34
|
-
2: 'dvadeset',
|
|
35
|
-
3: 'trideset',
|
|
36
|
-
4: 'četrdeset',
|
|
37
|
-
5: 'pedeset',
|
|
38
|
-
6: 'šezdeset',
|
|
39
|
-
7: 'sedamdeset',
|
|
40
|
-
8: 'osamdeset',
|
|
41
|
-
9: 'devedeset'
|
|
42
|
-
};
|
|
43
|
-
this.hundreds = {
|
|
44
|
-
1: 'sto',
|
|
45
|
-
2: 'dvesta',
|
|
46
|
-
3: 'trista',
|
|
47
|
-
4: 'četiristo',
|
|
48
|
-
5: 'petsto',
|
|
49
|
-
6: 'šesto',
|
|
50
|
-
7: 'sedamsto',
|
|
51
|
-
8: 'osamsto',
|
|
52
|
-
9: 'devetsto'
|
|
53
|
-
};
|
|
54
|
-
this.SCALE = {
|
|
55
|
-
0: ['', '', '', false],
|
|
56
|
-
1: ['hiljada', 'hiljade', 'hiljada', true], // 10 ^ 3
|
|
57
|
-
2: ['milion', 'miliona', 'miliona', false], // 10 ^ 6
|
|
58
|
-
3: ['milijarda', 'milijarde', 'milijarda', false], // 10 ^ 9
|
|
59
|
-
4: ['bilion', 'biliona', 'biliona', false], // 10 ^ 12
|
|
60
|
-
5: ['bilijarda', 'bilijarde', 'bilijarda', false], // 10 ^ 15
|
|
61
|
-
6: ['trilion', 'triliona', 'triliona', false], // 10 ^ 18
|
|
62
|
-
7: ['trilijarda', 'trilijarde', 'trilijarda', false], // 10 ^ 21
|
|
63
|
-
8: ['kvadrilion', 'kvadriliona', 'kvadriliona', false], // 10 ^ 24
|
|
64
|
-
9: ['kvadrilijarda', 'kvadrilijarde', 'kvadrilijarda', false], // 10 ^ 27
|
|
65
|
-
10: ['kvintilion', 'kvintiliona', 'kvintiliona', false], // 10 ^ 30
|
|
66
|
-
};
|
|
67
|
-
this.feminine = false;
|
|
52
|
+
SCALE = {
|
|
53
|
+
0: ['', '', '', false],
|
|
54
|
+
1: ['hiljada', 'hiljade', 'hiljada', true], // 10 ^ 3
|
|
55
|
+
2: ['milion', 'miliona', 'miliona', false], // 10 ^ 6
|
|
56
|
+
3: ['milijarda', 'milijarde', 'milijarda', false], // 10 ^ 9
|
|
57
|
+
4: ['bilion', 'biliona', 'biliona', false], // 10 ^ 12
|
|
58
|
+
5: ['bilijarda', 'bilijarde', 'bilijarda', false], // 10 ^ 15
|
|
59
|
+
6: ['trilion', 'triliona', 'triliona', false], // 10 ^ 18
|
|
60
|
+
7: ['trilijarda', 'trilijarde', 'trilijarda', false], // 10 ^ 21
|
|
61
|
+
8: ['kvadrilion', 'kvadriliona', 'kvadriliona', false], // 10 ^ 24
|
|
62
|
+
9: ['kvadrilijarda', 'kvadrilijarde', 'kvadrilijarda', false], // 10 ^ 27
|
|
63
|
+
10: ['kvintilion', 'kvintiliona', 'kvintiliona', false], // 10 ^ 30
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
feminine = false;
|
|
67
|
+
|
|
68
|
+
constructor() {
|
|
69
|
+
super({
|
|
70
|
+
negativeWord: 'minus',
|
|
71
|
+
separatorWord: 'zapeta',
|
|
72
|
+
zero: 'nula'
|
|
73
|
+
});
|
|
68
74
|
}
|
|
69
75
|
|
|
70
76
|
pluralize(n, forms) {
|
|
71
77
|
let form = 2;
|
|
72
|
-
if ((n %
|
|
73
|
-
if (n %
|
|
78
|
+
if ((n % 100n < 10n) || (n % 100n > 20n)) {
|
|
79
|
+
if (n % 10n == 1n) {
|
|
74
80
|
form = 0;
|
|
75
|
-
} else if ((n %
|
|
81
|
+
} else if ((n % 10n > 1n) && (n % 10n < 5n)) {
|
|
76
82
|
form = 1;
|
|
77
83
|
}
|
|
78
84
|
}
|
|
@@ -80,11 +86,11 @@ export class N2WordsSR extends N2WordsRU {
|
|
|
80
86
|
}
|
|
81
87
|
|
|
82
88
|
toCardinal(number) {
|
|
83
|
-
if (
|
|
89
|
+
if (number == 0) {
|
|
84
90
|
return this.zero;
|
|
85
91
|
}
|
|
86
92
|
const words = [];
|
|
87
|
-
const chunks = this.splitByX(
|
|
93
|
+
const chunks = this.splitByX(number.toString(), 3);
|
|
88
94
|
let i = chunks.length;
|
|
89
95
|
for (let j = 0; j < chunks.length; j++) {
|
|
90
96
|
const x = chunks[j];
|
|
@@ -112,6 +118,12 @@ export class N2WordsSR extends N2WordsRU {
|
|
|
112
118
|
}
|
|
113
119
|
}
|
|
114
120
|
|
|
115
|
-
|
|
116
|
-
|
|
121
|
+
/**
|
|
122
|
+
* Converts a value to cardinal (written) form.
|
|
123
|
+
* @param {number|string} value Number to be convert.
|
|
124
|
+
* @throws {Error} Value cannot be invalid.
|
|
125
|
+
* @returns {string} Value in cardinal (written) format.
|
|
126
|
+
*/
|
|
127
|
+
export default function(value) {
|
|
128
|
+
return new N2WordsSR().floatToCardinal(value);
|
|
117
129
|
}
|