n2words 1.13.0 → 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 +1 -1
- 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 +42 -37
- 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 +44 -42
- 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 +32 -106
- package/package.json +16 -10
- package/webpack.config.js +1 -1
- package/lib/classes/N2WordsAbs.mjs +0 -72
- package/lib/classes/N2WordsBase.mjs +0 -105
package/lib/i18n/FA.mjs
CHANGED
|
@@ -1,92 +1,103 @@
|
|
|
1
|
-
import
|
|
1
|
+
import AbstractLanguage from '../classes/AbstractLanguage.mjs';
|
|
2
2
|
|
|
3
|
-
export class N2WordsFA extends
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export class N2WordsFA extends AbstractLanguage {
|
|
4
|
+
namedNumbers = {
|
|
5
|
+
0: 'صفر',
|
|
6
|
+
1: 'یک',
|
|
7
|
+
2: 'دو',
|
|
8
|
+
3: 'سه',
|
|
9
|
+
4: 'چهار',
|
|
10
|
+
5: 'پنج',
|
|
11
|
+
6: 'شش',
|
|
12
|
+
7: 'هفت',
|
|
13
|
+
8: 'هشت',
|
|
14
|
+
9: 'نه',
|
|
15
|
+
10: 'ده',
|
|
16
|
+
11: 'یازده',
|
|
17
|
+
12: 'دوازده',
|
|
18
|
+
13: 'سیزده',
|
|
19
|
+
14: 'چهارده',
|
|
20
|
+
15: 'پانزده',
|
|
21
|
+
16: 'شانزده',
|
|
22
|
+
17: 'هفده',
|
|
23
|
+
18: 'هجده',
|
|
24
|
+
19: 'نوزده',
|
|
25
|
+
20: 'بیست',
|
|
26
|
+
30: 'سی',
|
|
27
|
+
40: 'چهل',
|
|
28
|
+
50: 'پنجاه',
|
|
29
|
+
60: 'شصت',
|
|
30
|
+
70: 'هفتاد',
|
|
31
|
+
80: 'هشتاد',
|
|
32
|
+
90: 'نود',
|
|
33
|
+
100: 'صد',
|
|
34
|
+
200: 'دویست',
|
|
35
|
+
300: 'سيصد',
|
|
36
|
+
400: 'چهار صد',
|
|
37
|
+
500: 'پانصد',
|
|
38
|
+
600: 'ششصد',
|
|
39
|
+
700: 'هفتصد',
|
|
40
|
+
800: 'هشتصد',
|
|
41
|
+
900: 'نهصد',
|
|
42
|
+
1000: 'هزار',
|
|
43
|
+
1000000: 'میلیون',
|
|
44
|
+
};
|
|
6
45
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
2: 'دو',
|
|
14
|
-
3: 'سه',
|
|
15
|
-
4: 'چهار',
|
|
16
|
-
5: 'پنج',
|
|
17
|
-
6: 'شش',
|
|
18
|
-
7: 'هفت',
|
|
19
|
-
8: 'هشت',
|
|
20
|
-
9: 'نه',
|
|
21
|
-
10: 'ده',
|
|
22
|
-
11: 'یازده',
|
|
23
|
-
12: 'دوازده',
|
|
24
|
-
13: 'سیزده',
|
|
25
|
-
14: 'چهارده',
|
|
26
|
-
15: 'پانزده',
|
|
27
|
-
16: 'شانزده',
|
|
28
|
-
17: 'هفده',
|
|
29
|
-
18: 'هجده',
|
|
30
|
-
19: 'نوزده',
|
|
31
|
-
20: 'بیست',
|
|
32
|
-
30: 'سی',
|
|
33
|
-
40: 'چهل',
|
|
34
|
-
50: 'پنجاه',
|
|
35
|
-
60: 'شصت',
|
|
36
|
-
70: 'هفتاد',
|
|
37
|
-
80: 'هشتاد',
|
|
38
|
-
90: 'نود',
|
|
39
|
-
100: 'صد',
|
|
40
|
-
200: 'دویست',
|
|
41
|
-
300: 'سيصد',
|
|
42
|
-
400: 'چهار صد',
|
|
43
|
-
500: 'پانصد',
|
|
44
|
-
600: 'ششصد',
|
|
45
|
-
700: 'هفتصد',
|
|
46
|
-
800: 'هشتصد',
|
|
47
|
-
900: 'نهصد',
|
|
48
|
-
1000: 'هزار',
|
|
49
|
-
1000000: 'میلیون',
|
|
50
|
-
};
|
|
46
|
+
constructor() {
|
|
47
|
+
super({
|
|
48
|
+
negativeWord: 'منفى',
|
|
49
|
+
separatorWord: 'ممیّز',
|
|
50
|
+
zero: 'صفر'
|
|
51
|
+
});
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
toCardinal(number) {
|
|
54
55
|
if (this.namedNumbers[number]) {
|
|
55
56
|
return this.namedNumbers[number];
|
|
56
57
|
}
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
|
|
59
|
+
if (number > 20n && number < 100n) {
|
|
60
|
+
let xone = number % 10n;
|
|
59
61
|
let xten = number - xone;
|
|
60
62
|
return `${this.namedNumbers[xten]} و ${this.namedNumbers[xone]}`;
|
|
61
63
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
|
|
65
|
+
if (number > 100n && number < 1000n) {
|
|
66
|
+
let xhundred = 100n * (number / 100n);
|
|
64
67
|
let tail = this.toCardinal(number - xhundred);
|
|
65
68
|
return `${this.namedNumbers[xhundred]} و ${tail}`;
|
|
66
69
|
}
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
|
|
71
|
+
if (number > 1000n && number < 1000000n) {
|
|
72
|
+
let thousandMultiplier = number / 1000n;
|
|
69
73
|
let namedThousandMultiplier =
|
|
70
|
-
(thousandMultiplier
|
|
74
|
+
(thousandMultiplier == 1n
|
|
71
75
|
? ''
|
|
72
76
|
: this.toCardinal(thousandMultiplier)) +
|
|
73
77
|
' ' +
|
|
74
78
|
this.namedNumbers[1000];
|
|
75
|
-
let tailNumber = number - thousandMultiplier *
|
|
76
|
-
let tail = tailNumber
|
|
79
|
+
let tailNumber = number - thousandMultiplier * 1000n;
|
|
80
|
+
let tail = tailNumber == 0n ? '' : ' ' + this.toCardinal(tailNumber);
|
|
77
81
|
return `${namedThousandMultiplier}${tail}`;
|
|
78
82
|
}
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
|
|
84
|
+
if (number > 1000000n) {
|
|
85
|
+
let millionMultiplier = number / 1000000n;
|
|
81
86
|
let namedMillion =
|
|
82
87
|
this.toCardinal(millionMultiplier) + ' ' + this.namedNumbers[1000000];
|
|
83
|
-
let tailNumber = number - millionMultiplier *
|
|
84
|
-
let tail = tailNumber
|
|
88
|
+
let tailNumber = number - millionMultiplier * 1000000n;
|
|
89
|
+
let tail = tailNumber == 0n ? '' : ' و ' + this.toCardinal(tailNumber);
|
|
85
90
|
return `${namedMillion}${tail}`;
|
|
86
91
|
}
|
|
87
92
|
}
|
|
88
93
|
}
|
|
89
94
|
|
|
90
|
-
|
|
91
|
-
|
|
95
|
+
/**
|
|
96
|
+
* Converts a value to cardinal (written) form.
|
|
97
|
+
* @param {number|string} value Number to be convert.
|
|
98
|
+
* @throws {Error} Value cannot be invalid.
|
|
99
|
+
* @returns {string} Value in cardinal (written) format.
|
|
100
|
+
*/
|
|
101
|
+
export default function(value) {
|
|
102
|
+
return new N2WordsFA().floatToCardinal(value);
|
|
92
103
|
}
|
package/lib/i18n/FR.mjs
CHANGED
|
@@ -1,50 +1,49 @@
|
|
|
1
|
-
import
|
|
1
|
+
import BaseLanguage from '../classes/BaseLanguage.mjs';
|
|
2
2
|
|
|
3
|
-
export class N2WordsFR extends
|
|
3
|
+
export class N2WordsFR extends BaseLanguage {
|
|
4
4
|
constructor() {
|
|
5
|
-
super(
|
|
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
|
-
];
|
|
5
|
+
super({
|
|
6
|
+
negativeWord: 'moins',
|
|
7
|
+
separatorWord: 'virgule',
|
|
8
|
+
zero: 'zéro'
|
|
9
|
+
},[
|
|
10
|
+
[1000000000000000000000000000n, 'quadrilliard'],
|
|
11
|
+
[1000000000000000000000000n, 'quadrillion'],
|
|
12
|
+
[1000000000000000000000n, 'trilliard'],
|
|
13
|
+
[1000000000000000000n, 'trillion'],
|
|
14
|
+
[1000000000000000n, 'billiard'],
|
|
15
|
+
[1000000000000n, 'billion'],
|
|
16
|
+
[1000000000n, 'milliard'],
|
|
17
|
+
[1000000n, 'million'],
|
|
18
|
+
[1000n, 'mille'],
|
|
19
|
+
[100n, 'cent'],
|
|
20
|
+
[80n, 'quatre-vingts'],
|
|
21
|
+
[60n, 'soixante'],
|
|
22
|
+
[50n, 'cinquante'],
|
|
23
|
+
[40n, 'quarante'],
|
|
24
|
+
[30n, 'trente'],
|
|
25
|
+
[20n, 'vingt'],
|
|
26
|
+
[19n, 'dix-neuf'],
|
|
27
|
+
[18n, 'dix-huit'],
|
|
28
|
+
[17n, 'dix-sept'],
|
|
29
|
+
[16n, 'seize'],
|
|
30
|
+
[15n, 'quinze'],
|
|
31
|
+
[14n, 'quatorze'],
|
|
32
|
+
[13n, 'treize'],
|
|
33
|
+
[12n, 'douze'],
|
|
34
|
+
[11n, 'onze'],
|
|
35
|
+
[10n, 'dix'],
|
|
36
|
+
[9n, 'neuf'],
|
|
37
|
+
[8n, 'huit'],
|
|
38
|
+
[7n, 'sept'],
|
|
39
|
+
[6n, 'six'],
|
|
40
|
+
[5n, 'cinq'],
|
|
41
|
+
[4n, 'quatre'],
|
|
42
|
+
[3n, 'trois'],
|
|
43
|
+
[2n, 'deux'],
|
|
44
|
+
[1n, 'un'],
|
|
45
|
+
[0n, 'zéro']
|
|
46
|
+
]);
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
merge(curr, next) { // {'cent':100}, {'vingt-cinq':25}
|
|
@@ -81,6 +80,12 @@ export class N2WordsFR extends N2WordsBase {
|
|
|
81
80
|
}
|
|
82
81
|
}
|
|
83
82
|
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Converts a value to cardinal (written) form.
|
|
85
|
+
* @param {number|string} value Number to be convert.
|
|
86
|
+
* @throws {Error} Value cannot be invalid.
|
|
87
|
+
* @returns {string} Value in cardinal (written) format.
|
|
88
|
+
*/
|
|
89
|
+
export default function(value) {
|
|
90
|
+
return new N2WordsFR().floatToCardinal(value);
|
|
86
91
|
}
|
package/lib/i18n/HE.mjs
CHANGED
|
@@ -1,34 +1,80 @@
|
|
|
1
1
|
import {N2WordsRU} from './RU.mjs';
|
|
2
2
|
|
|
3
3
|
export class N2WordsHE extends N2WordsRU {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
and = 'ו';
|
|
5
|
+
|
|
6
|
+
ones = {
|
|
7
|
+
1: 'אחת',
|
|
8
|
+
2: 'שתים',
|
|
9
|
+
3: 'שלש',
|
|
10
|
+
4: 'ארבע',
|
|
11
|
+
5: 'חמש',
|
|
12
|
+
6: 'שש',
|
|
13
|
+
7: 'שבע',
|
|
14
|
+
8: 'שמונה',
|
|
15
|
+
9: 'תשע'
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
tens = {
|
|
19
|
+
0: 'עשר',
|
|
20
|
+
1: 'אחת עשרה',
|
|
21
|
+
2: 'שתים עשרה',
|
|
22
|
+
3: 'שלש עשרה',
|
|
23
|
+
4: 'ארבע עשרה',
|
|
24
|
+
5: 'חמש עשרה',
|
|
25
|
+
6: 'שש עשרה',
|
|
26
|
+
7: 'שבע עשרה',
|
|
27
|
+
8: 'שמונה עשרה',
|
|
28
|
+
9: 'תשע עשרה'
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
twenties = {
|
|
32
|
+
2: 'עשרים',
|
|
33
|
+
3: 'שלשים',
|
|
34
|
+
4: 'ארבעים',
|
|
35
|
+
5: 'חמישים',
|
|
36
|
+
6: 'ששים',
|
|
37
|
+
7: 'שבעים',
|
|
38
|
+
8: 'שמונים',
|
|
39
|
+
9: 'תשעים'
|
|
40
|
+
};
|
|
6
41
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
42
|
+
hundreds = {
|
|
43
|
+
1: 'מאה',
|
|
44
|
+
2: 'מאתיים',
|
|
45
|
+
3: 'מאות'
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
thousands = {
|
|
49
|
+
1: 'אלף',
|
|
50
|
+
2: 'אלפיים',
|
|
51
|
+
3: 'שלשת אלפים',
|
|
52
|
+
4: 'ארבעת אלפים',
|
|
53
|
+
5: 'חמשת אלפים',
|
|
54
|
+
6: 'ששת אלפים',
|
|
55
|
+
7: 'שבעת אלפים',
|
|
56
|
+
8: 'שמונת אלפים',
|
|
57
|
+
9: 'תשעת אלפים'
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
constructor() {
|
|
61
|
+
/**
|
|
62
|
+
* @todo Confirm `negativeWord`
|
|
63
|
+
* @todo Set `separatorWord`
|
|
64
|
+
*/
|
|
65
|
+
super({
|
|
66
|
+
negativeWord: 'מינוס',
|
|
67
|
+
//separatorWord: ,
|
|
68
|
+
zero: 'אפס'
|
|
69
|
+
});
|
|
24
70
|
}
|
|
25
71
|
|
|
26
72
|
toCardinal(number) {
|
|
27
|
-
if (
|
|
73
|
+
if (number == 0) {
|
|
28
74
|
return this.zero;
|
|
29
75
|
}
|
|
30
76
|
const words = [];
|
|
31
|
-
const chunks = this.splitByX(
|
|
77
|
+
const chunks = this.splitByX(number.toString(), 3);
|
|
32
78
|
let i = chunks.length;
|
|
33
79
|
for (let j = 0; j < chunks.length; j++) {
|
|
34
80
|
const x = chunks[j];
|
|
@@ -67,6 +113,12 @@ export class N2WordsHE extends N2WordsRU {
|
|
|
67
113
|
}
|
|
68
114
|
}
|
|
69
115
|
|
|
70
|
-
|
|
71
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Converts a value to cardinal (written) form.
|
|
118
|
+
* @param {number|string} value Number to be convert.
|
|
119
|
+
* @throws {Error} Value cannot be invalid.
|
|
120
|
+
* @returns {string} Value in cardinal (written) format.
|
|
121
|
+
*/
|
|
122
|
+
export default function(value) {
|
|
123
|
+
return new N2WordsHE().floatToCardinal(value);
|
|
72
124
|
}
|
package/lib/i18n/HR.mjs
CHANGED
|
@@ -1,78 +1,84 @@
|
|
|
1
1
|
import {N2WordsRU} from './RU.mjs';
|
|
2
2
|
|
|
3
3
|
export class N2WordsHR extends N2WordsRU {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
ones = {
|
|
5
|
+
1: ['jedan', 'jedna'],
|
|
6
|
+
2: ['dva', 'dvije'],
|
|
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: 'dvjesto',
|
|
43
|
+
3: 'tristo',
|
|
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: 'dvjesto',
|
|
46
|
-
3: 'tristo',
|
|
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: ['tisuća', 'tisuće', 'tisuća', true], // 10 ^ 3
|
|
57
|
-
2: ['milijun', 'milijuna', 'milijuna', false], // 10 ^ 6
|
|
58
|
-
3: ['milijarda', 'milijarde', 'milijarda', false], // 10 ^ 9
|
|
59
|
-
4: ['bilijun', 'bilijuna', 'bilijuna', false], // 10 ^ 12
|
|
60
|
-
5: ['bilijarda', 'bilijarde', 'bilijarda', false], // 10 ^ 15
|
|
61
|
-
6: ['trilijun', 'trilijuna', 'trilijuna', false], // 10 ^ 18
|
|
62
|
-
7: ['trilijarda', 'trilijarde', 'trilijarda', false], // 10 ^ 21
|
|
63
|
-
8: ['kvadrilijun', 'kvadrilijuna', 'kvadrilijuna', false], // 10 ^ 24
|
|
64
|
-
9: ['kvadrilijarda', 'kvadrilijarde', 'kvadrilijarda', false], // 10 ^ 27
|
|
65
|
-
10: ['kvintilijun', 'kvintilijuna', 'kvintilijuna', false], // 10 ^ 30
|
|
66
|
-
};
|
|
67
|
-
this.feminine = false;
|
|
52
|
+
SCALE = {
|
|
53
|
+
0: ['', '', '', false],
|
|
54
|
+
1: ['tisuća', 'tisuće', 'tisuća', true], // 10 ^ 3
|
|
55
|
+
2: ['milijun', 'milijuna', 'milijuna', false], // 10 ^ 6
|
|
56
|
+
3: ['milijarda', 'milijarde', 'milijarda', false], // 10 ^ 9
|
|
57
|
+
4: ['bilijun', 'bilijuna', 'bilijuna', false], // 10 ^ 12
|
|
58
|
+
5: ['bilijarda', 'bilijarde', 'bilijarda', false], // 10 ^ 15
|
|
59
|
+
6: ['trilijun', 'trilijuna', 'trilijuna', false], // 10 ^ 18
|
|
60
|
+
7: ['trilijarda', 'trilijarde', 'trilijarda', false], // 10 ^ 21
|
|
61
|
+
8: ['kvadrilijun', 'kvadrilijuna', 'kvadrilijuna', false], // 10 ^ 24
|
|
62
|
+
9: ['kvadrilijarda', 'kvadrilijarde', 'kvadrilijarda', false], // 10 ^ 27
|
|
63
|
+
10: ['kvintilijun', 'kvintilijuna', 'kvintilijuna', false], // 10 ^ 30
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
feminine = false;
|
|
67
|
+
|
|
68
|
+
constructor() {
|
|
69
|
+
super({
|
|
70
|
+
negativeWord: 'minus',
|
|
71
|
+
separatorWord: 'zarez',
|
|
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 N2WordsHR 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 N2WordsHR 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 N2WordsHR().floatToCardinal(value);
|
|
117
129
|
}
|