liczbyslowniepopolsku 1.0.8 → 2.0.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/README.md +55 -18
- package/dist/index.es.js +110 -0
- package/dist/index.umd.js +1 -0
- package/package.json +71 -20
- package/.babelrc +0 -4
- package/.vscode/settings.json +0 -8
- package/dist/liczbySlownie.js +0 -1
- package/src/__snapshots__/liczbySlownie.spec.js.snap +0 -67
- package/src/groszeslownie.js +0 -63
- package/src/index.js +0 -3
- package/src/liczbyslownie.js +0 -98
- package/src/liczbyslownie.spec.js +0 -79
- package/src/odmianadziesiatek.js +0 -57
- package/src/odmianazlotych.js +0 -17
- package/webpack.config.cjs +0 -25
package/README.md
CHANGED
@@ -1,34 +1,71 @@
|
|
1
|
-
#
|
1
|
+
# Liczby Słownie po Polsku
|
2
2
|
|
3
|
-
|
3
|
+
Nowoczesna biblioteka TypeScript do konwersji liczb na ich zapis słowny w języku polskim. Wersja 2.0.0 została całkowicie przepisana z wykorzystaniem najnowszych technologii i best practices.
|
4
4
|
|
5
|
-
##
|
5
|
+
## Instalacja
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
```bash
|
8
|
+
npm install liczbySlowniepopolsku
|
9
|
+
# lub
|
10
|
+
yarn add liczbySlowniepopolsku
|
11
|
+
```
|
12
|
+
|
13
|
+
## Użycie
|
14
|
+
|
15
|
+
```typescript
|
16
|
+
import { LiczbySlownie } from 'liczbySlowniepopolsku';
|
10
17
|
|
18
|
+
// Podstawowe użycie
|
19
|
+
const konwerter = new LiczbySlownie();
|
20
|
+
console.log(konwerter.liczbySlownie(1234)); // "tysiąc dwieście trzydzieści cztery"
|
21
|
+
console.log(konwerter.kwotaSlownie(1234.56)); // "tysiąc dwieście trzydzieści cztery złote i pięćdziesiąt sześć groszy"
|
22
|
+
|
23
|
+
// Z niestandardową konfiguracją
|
24
|
+
const konwerterNiestandardowy = new LiczbySlownie({
|
25
|
+
separator: '-',
|
26
|
+
groszeSeparator: 'oraz'
|
27
|
+
});
|
28
|
+
console.log(konwerterNiestandardowy.liczbySlownie(21)); // "dwadzieścia-jeden"
|
29
|
+
console.log(konwerterNiestandardowy.kwotaSlownie(1.01)); // "jeden złotyorazjeden grosz"
|
11
30
|
```
|
12
|
-
import { liczbySlownie } from "liczbyslowniepopolsku";
|
13
31
|
|
14
|
-
|
15
|
-
|
32
|
+
## Funkcje
|
33
|
+
|
34
|
+
### liczbySlownie(liczba: number): string
|
35
|
+
Konwertuje liczbę na jej zapis słowny.
|
36
|
+
|
37
|
+
### kwotaSlownie(kwota: number): string
|
38
|
+
Konwertuje kwotę (z groszami) na zapis słowny.
|
39
|
+
|
40
|
+
## Konfiguracja
|
41
|
+
|
42
|
+
Możesz dostosować zachowanie biblioteki poprzez przekazanie obiektu konfiguracyjnego:
|
43
|
+
|
44
|
+
```typescript
|
45
|
+
interface Konfiguracja {
|
46
|
+
separator: string; // separator między słowami (domyślnie: spacja)
|
47
|
+
groszeSeparator: string; // separator między złotymi a groszami (domyślnie: " i ")
|
48
|
+
}
|
16
49
|
```
|
17
50
|
|
18
|
-
##
|
51
|
+
## Wsparcie dla TypeScript
|
19
52
|
|
20
|
-
|
21
|
-
<br>
|
22
|
-
<p>Jeśli liczba posiada część dziesiętną, to zostaje ona oddzielona od części całkowitej i przetwarzana osobno.</p>
|
53
|
+
Biblioteka jest w pełni napisana w TypeScript i zawiera wszystkie potrzebne deklaracje typów.
|
23
54
|
|
24
|
-
##
|
55
|
+
## Testy
|
25
56
|
|
26
|
-
|
57
|
+
Biblioteka jest w pełni przetestowana. Aby uruchomić testy:
|
58
|
+
|
59
|
+
```bash
|
60
|
+
npm test
|
61
|
+
# lub
|
62
|
+
yarn test
|
63
|
+
```
|
27
64
|
|
28
|
-
##
|
65
|
+
## Licencja
|
29
66
|
|
30
|
-
|
67
|
+
MIT
|
31
68
|
|
32
69
|
## Autor
|
33
70
|
|
34
|
-
|
71
|
+
Konrad Tytus Gruca
|
package/dist/index.es.js
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
var h = Object.defineProperty;
|
2
|
+
var f = (a, i, t) => i in a ? h(a, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[i] = t;
|
3
|
+
var y = (a, i, t) => f(a, typeof i != "symbol" ? i + "" : i, t);
|
4
|
+
const p = {
|
5
|
+
odmiana: {
|
6
|
+
jeden: "",
|
7
|
+
dwa: "y",
|
8
|
+
piec: ""
|
9
|
+
},
|
10
|
+
separator: " ",
|
11
|
+
groszeSeparator: " i "
|
12
|
+
}, l = [
|
13
|
+
"",
|
14
|
+
"jeden",
|
15
|
+
"dwa",
|
16
|
+
"trzy",
|
17
|
+
"cztery",
|
18
|
+
"pięć",
|
19
|
+
"sześć",
|
20
|
+
"siedem",
|
21
|
+
"osiem",
|
22
|
+
"dziewięć"
|
23
|
+
], m = [
|
24
|
+
"dziesięć",
|
25
|
+
"jedenaście",
|
26
|
+
"dwanaście",
|
27
|
+
"trzynaście",
|
28
|
+
"czternaście",
|
29
|
+
"piętnaście",
|
30
|
+
"szesnaście",
|
31
|
+
"siedemnaście",
|
32
|
+
"osiemnaście",
|
33
|
+
"dziewiętnaście"
|
34
|
+
], w = [
|
35
|
+
"",
|
36
|
+
"",
|
37
|
+
"dwadzieścia",
|
38
|
+
"trzydzieści",
|
39
|
+
"czterdzieści",
|
40
|
+
"pięćdziesiąt",
|
41
|
+
"sześćdziesiąt",
|
42
|
+
"siedemdziesiąt",
|
43
|
+
"osiemdziesiąt",
|
44
|
+
"dziewięćdziesiąt"
|
45
|
+
], j = [
|
46
|
+
"",
|
47
|
+
"sto",
|
48
|
+
"dwieście",
|
49
|
+
"trzysta",
|
50
|
+
"czterysta",
|
51
|
+
"pięćset",
|
52
|
+
"sześćset",
|
53
|
+
"siedemset",
|
54
|
+
"osiemset",
|
55
|
+
"dziewięćset"
|
56
|
+
];
|
57
|
+
class g {
|
58
|
+
constructor(i = {}) {
|
59
|
+
y(this, "konfiguracja");
|
60
|
+
this.konfiguracja = { ...p, ...i };
|
61
|
+
}
|
62
|
+
liczbySlownie(i) {
|
63
|
+
if (i === 0) return "zero";
|
64
|
+
const t = i < 0;
|
65
|
+
let e = Math.abs(i);
|
66
|
+
const s = [];
|
67
|
+
if (e >= 1e9) {
|
68
|
+
const n = Math.floor(e / 1e9), r = this.przetworzGrupe(n, "miliard", "miliardy", "miliardów");
|
69
|
+
r && s.push(r), e %= 1e9;
|
70
|
+
}
|
71
|
+
if (e >= 1e6) {
|
72
|
+
const n = Math.floor(e / 1e6), r = this.przetworzGrupe(n, "milion", "miliony", "milionów");
|
73
|
+
r && s.push(r), e %= 1e6;
|
74
|
+
}
|
75
|
+
if (e >= 1e3) {
|
76
|
+
const n = Math.floor(e / 1e3), r = this.przetworzGrupe(n, "tysiąc", "tysiące", "tysięcy");
|
77
|
+
r && s.push(r), e %= 1e3;
|
78
|
+
}
|
79
|
+
if (e > 0) {
|
80
|
+
const n = this.przetworzGrupe(e, "", "", "");
|
81
|
+
n && s.push(n);
|
82
|
+
}
|
83
|
+
let o = s.filter(Boolean).join(this.konfiguracja.separator);
|
84
|
+
return t && (o = "minus" + (o ? this.konfiguracja.separator + o : "")), o;
|
85
|
+
}
|
86
|
+
kwotaSlownie(i) {
|
87
|
+
const t = i < 0, e = Math.floor(Math.abs(i)), s = Math.round((Math.abs(i) - e) * 100);
|
88
|
+
let o = "";
|
89
|
+
return t && (o += "minus "), o += this.liczbySlownie(e) + " " + this.odmianaZlotych(e), s > 0 && (o += this.konfiguracja.groszeSeparator + this.liczbySlownie(s) + " " + this.odmianaGroszy(s)), o;
|
90
|
+
}
|
91
|
+
przetworzGrupe(i, t, e, s) {
|
92
|
+
if (i === 0) return "";
|
93
|
+
const o = Math.floor(i / 100), n = Math.floor(i % 100 / 10), r = i % 10, z = i % 100, c = [];
|
94
|
+
o > 0 && c.push(j[o]), z >= 10 && z <= 19 ? c.push(m[z - 10]) : (n > 0 && c.push(w[n]), (r > 0 || i === 1 && t === "tysiąc") && c.push(l[r]));
|
95
|
+
const u = c.filter(Boolean).join(this.konfiguracja.separator), d = this.odmianaLiczby(i, t, e, s);
|
96
|
+
return d ? !u || i === 1 && t === "tysiąc" ? d : u + this.konfiguracja.separator + d : u;
|
97
|
+
}
|
98
|
+
odmianaLiczby(i, t, e, s) {
|
99
|
+
return !t && !e && !s ? "" : i === 1 ? t : i % 100 >= 12 && i % 100 <= 14 ? s : i % 10 >= 2 && i % 10 <= 4 ? e : s;
|
100
|
+
}
|
101
|
+
odmianaZlotych(i) {
|
102
|
+
return this.odmianaLiczby(i, "złoty", "złote", "złotych");
|
103
|
+
}
|
104
|
+
odmianaGroszy(i) {
|
105
|
+
return this.odmianaLiczby(i, "grosz", "grosze", "groszy");
|
106
|
+
}
|
107
|
+
}
|
108
|
+
export {
|
109
|
+
g as LiczbySlownie
|
110
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(o,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(o=typeof globalThis<"u"?globalThis:o||self,s(o.LiczbySlownie={}))})(this,function(o){"use strict";var j=Object.defineProperty;var g=(o,s,d)=>s in o?j(o,s,{enumerable:!0,configurable:!0,writable:!0,value:d}):o[s]=d;var h=(o,s,d)=>g(o,typeof s!="symbol"?s+"":s,d);const s={odmiana:{jeden:"",dwa:"y",piec:""},separator:" ",groszeSeparator:" i "},d=["","jeden","dwa","trzy","cztery","pięć","sześć","siedem","osiem","dziewięć"],l=["dziesięć","jedenaście","dwanaście","trzynaście","czternaście","piętnaście","szesnaście","siedemnaście","osiemnaście","dziewiętnaście"],p=["","","dwadzieścia","trzydzieści","czterdzieści","pięćdziesiąt","sześćdziesiąt","siedemdziesiąt","osiemdziesiąt","dziewięćdziesiąt"],m=["","sto","dwieście","trzysta","czterysta","pięćset","sześćset","siedemset","osiemset","dziewięćset"];class w{constructor(i={}){h(this,"konfiguracja");this.konfiguracja={...s,...i}}liczbySlownie(i){if(i===0)return"zero";const c=i<0;let e=Math.abs(i);const t=[];if(e>=1e9){const r=Math.floor(e/1e9),a=this.przetworzGrupe(r,"miliard","miliardy","miliardów");a&&t.push(a),e%=1e9}if(e>=1e6){const r=Math.floor(e/1e6),a=this.przetworzGrupe(r,"milion","miliony","milionów");a&&t.push(a),e%=1e6}if(e>=1e3){const r=Math.floor(e/1e3),a=this.przetworzGrupe(r,"tysiąc","tysiące","tysięcy");a&&t.push(a),e%=1e3}if(e>0){const r=this.przetworzGrupe(e,"","","");r&&t.push(r)}let n=t.filter(Boolean).join(this.konfiguracja.separator);return c&&(n="minus"+(n?this.konfiguracja.separator+n:"")),n}kwotaSlownie(i){const c=i<0,e=Math.floor(Math.abs(i)),t=Math.round((Math.abs(i)-e)*100);let n="";return c&&(n+="minus "),n+=this.liczbySlownie(e)+" "+this.odmianaZlotych(e),t>0&&(n+=this.konfiguracja.groszeSeparator+this.liczbySlownie(t)+" "+this.odmianaGroszy(t)),n}przetworzGrupe(i,c,e,t){if(i===0)return"";const n=Math.floor(i/100),r=Math.floor(i%100/10),a=i%10,f=i%100,z=[];n>0&&z.push(m[n]),f>=10&&f<=19?z.push(l[f-10]):(r>0&&z.push(p[r]),(a>0||i===1&&c==="tysiąc")&&z.push(d[a]));const y=z.filter(Boolean).join(this.konfiguracja.separator),u=this.odmianaLiczby(i,c,e,t);return u?!y||i===1&&c==="tysiąc"?u:y+this.konfiguracja.separator+u:y}odmianaLiczby(i,c,e,t){return!c&&!e&&!t?"":i===1?c:i%100>=12&&i%100<=14?t:i%10>=2&&i%10<=4?e:t}odmianaZlotych(i){return this.odmianaLiczby(i,"złoty","złote","złotych")}odmianaGroszy(i){return this.odmianaLiczby(i,"grosz","grosze","groszy")}}o.LiczbySlownie=w,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
@@ -1,32 +1,83 @@
|
|
1
1
|
{
|
2
2
|
"name": "liczbyslowniepopolsku",
|
3
|
-
"version": "
|
4
|
-
"description": "
|
5
|
-
"main": "./src/index.js",
|
3
|
+
"version": "2.0.0",
|
4
|
+
"description": "Nowoczesna biblioteka do zamiany liczb na zapis słowny w języku polskim",
|
6
5
|
"type": "module",
|
7
|
-
"
|
8
|
-
"
|
6
|
+
"main": "./dist/index.umd.js",
|
7
|
+
"module": "./dist/index.es.js",
|
8
|
+
"types": "./dist/index.d.ts",
|
9
9
|
"exports": {
|
10
|
-
"
|
11
|
-
"import": "./
|
12
|
-
"require": "./
|
13
|
-
|
14
|
-
"./src/index.js": {
|
15
|
-
"import": "./src/index.js",
|
16
|
-
"require": "./src/index.js"
|
10
|
+
".": {
|
11
|
+
"import": "./dist/index.es.js",
|
12
|
+
"require": "./dist/index.umd.js",
|
13
|
+
"types": "./dist/index.d.ts"
|
17
14
|
}
|
18
15
|
},
|
16
|
+
"files": [
|
17
|
+
"dist"
|
18
|
+
],
|
19
19
|
"scripts": {
|
20
|
-
"
|
20
|
+
"dev": "vite",
|
21
|
+
"build": "tsc && vite build",
|
22
|
+
"test": "vitest",
|
23
|
+
"test:coverage": "vitest run --coverage",
|
24
|
+
"lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
25
|
+
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
|
26
|
+
"prepare": "husky install",
|
27
|
+
"prepublishOnly": "npm run build",
|
28
|
+
"docs": "typedoc --out docs src",
|
29
|
+
"release": "standard-version",
|
30
|
+
"validate": "npm-run-all --parallel lint test build"
|
31
|
+
},
|
32
|
+
"keywords": [
|
33
|
+
"polish",
|
34
|
+
"numbers",
|
35
|
+
"words",
|
36
|
+
"converter",
|
37
|
+
"currency",
|
38
|
+
"amount",
|
39
|
+
"typescript",
|
40
|
+
"i18n",
|
41
|
+
"localization",
|
42
|
+
"internationalization",
|
43
|
+
"polski",
|
44
|
+
"język polski",
|
45
|
+
"liczby",
|
46
|
+
"słownie",
|
47
|
+
"złoty",
|
48
|
+
"grosz"
|
49
|
+
],
|
50
|
+
"author": "Konrad Tytus Gruca",
|
51
|
+
"license": "MIT",
|
52
|
+
"repository": {
|
53
|
+
"type": "git",
|
54
|
+
"url": "git+https://github.com/effectiveone/liczbySlownie.git"
|
55
|
+
},
|
56
|
+
"bugs": {
|
57
|
+
"url": "https://github.com/effectiveone/liczbySlownie/issues"
|
21
58
|
},
|
59
|
+
"homepage": "https://github.com/effectiveone/liczbySlownie#readme",
|
22
60
|
"devDependencies": {
|
23
|
-
"
|
24
|
-
"
|
25
|
-
"
|
61
|
+
"@commitlint/cli": "^18.6.1",
|
62
|
+
"@commitlint/config-conventional": "^18.6.2",
|
63
|
+
"@types/node": "^20.11.24",
|
64
|
+
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
65
|
+
"@typescript-eslint/parser": "^7.1.0",
|
66
|
+
"@vitest/coverage-v8": "^1.3.1",
|
67
|
+
"eslint": "^8.57.0",
|
68
|
+
"eslint-config-prettier": "^9.1.0",
|
69
|
+
"eslint-plugin-prettier": "^5.1.3",
|
70
|
+
"husky": "^9.0.11",
|
71
|
+
"lint-staged": "^15.2.2",
|
72
|
+
"npm-run-all": "^4.1.5",
|
73
|
+
"prettier": "^3.2.5",
|
74
|
+
"standard-version": "^9.5.0",
|
75
|
+
"typedoc": "^0.25.12",
|
76
|
+
"typescript": "~5.5.0",
|
77
|
+
"vite": "^5.1.4",
|
78
|
+
"vitest": "^1.3.1"
|
26
79
|
},
|
27
|
-
"
|
28
|
-
"
|
29
|
-
"@babel/preset-env": "^7.20.2",
|
30
|
-
"babel-loader": "^8.1.0"
|
80
|
+
"engines": {
|
81
|
+
"node": ">=16.0.0"
|
31
82
|
}
|
32
83
|
}
|
package/.babelrc
DELETED
package/.vscode/settings.json
DELETED
package/dist/liczbySlownie.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.liczbyslowniepopolsku=t():e.liczbyslowniepopolsku=t()}(self,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{liczbySlownie:()=>u});var r=[""," jeden"," dwa"," trzy"," cztery"," pięć"," sześć"," siedem"," osiem"," dziewięć"],o=[""," jedenaście"," dwanaście"," trzynaście"," czternaście"," piętnaście"," szesnaście"," siedemnaście"," osiemnaście"," dziewiętnaście"],n=[""," dziesięć"," dwadzieścia"," trzydzieści"," czterdzieści"," pięćdziesiąt"," sześćdziesiąt"," siedemdziesiąt"," osiemdziesiąt"," dziewięćdziesiąt"],i=[""," sto"," dwieście"," trzysta"," czterysta"," pięćset"," sześćset"," siedemset"," osiemset"," dziewięćset"],a=[["","",""],[" tysiąc"," tysiące"," tysięcy"],[" milion"," miliony"," milionów"],[" miliard"," miliardy"," miliardów"],[" bilion"," biliony"," bilionów"],[" biliard"," biliardy"," biliardów"],[" trylion"," tryliony"," trylionów"]];function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=new Array(t);r<t;r++)o[r]=e[r];return o}function c(e){var t,c,s=(t=(null==e?void 0:e.toFixed(2)).toString().split("."),c=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o,n,i,a,l=[],c=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(o=i.call(r)).done)&&(l.push(o.value),l.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw n}}return l}}(t,c)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}(t,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=s[0],f=s[1],y=parseInt(u),d=parseInt(f||"0");if(isNaN(y)||isNaN(d))return"Niepoprawna wartość";var p="";0===y&&0===d&&(p="zero złotych"),y<0&&(y=-y);for(var m=0;y>0;){var b=Math.floor(y%1e3/100),z=0,v=Math.floor(y%100/10),h=Math.floor(y%10);1==v&&h>0&&(z=h,v=0,h=0);var g=2;1==h&&b+v+z==0&&(g=0),2!=h&&3!=h&&4!=h||(g=1),b+v+z+h>0&&(p=i[b]+n[v]+o[z]+r[h]+a[m][g]+p),m++,y=Math.floor(y/1e3)}return p}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=new Array(t);r<t;r++)o[r]=e[r];return o}function u(e){var t,l,u=(t=(null!=e?e.toFixed(2):null).toString().split("."),l=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o,n,i,a,l=[],c=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(o=i.call(r)).done)&&(l.push(o.value),l.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw n}}return l}}(t,l)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?s(e,t):void 0}}(t,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),f=u[0],y=u[1],d=parseInt(f),p=function(e){return"".concat(e%10==1&&e%100!=11?"złoty":e%10>=2&&e%10<=4&&!(e%100>=12&&e%100<=14)?"złote":"złotych")}(d),m=parseInt(y||"0");if(isNaN(d)||isNaN(m))return"Niepoprawna wartość";var b="",z="";0===d&&0===m&&(b="zero"),d<0&&(z="minus",d=-d);for(var v=0;d>0;){var h=Math.floor(d%1e3/100),g=0,w=Math.floor(d%100/10),j=Math.floor(d%10);1==w&&j>0&&(g=j,w=0,j=0);var S=2;1==j&&h+w+g==0&&(S=0),2!=j&&3!=j&&4!=j||(S=1),h+w+g+j>0&&(b=i[h]+n[w]+o[g]+r[j]+a[v][S]+b),v++,d=Math.floor(d/1e3)}if(0===m)return b.trim()+" "+p;var M="";return M=1===m?"jeden grosz":m%10>=2&&m%10<=4&&1!==Math.floor(m/10)?"".concat(c(m)," grosze"):"".concat(c(m)," groszy"),""===b?z+M.trim():"".concat(b).concat(p," i ").concat(M)}return console.log(u(123.45)),console.log(u(500)),console.log(u(9999.99)),console.log(u(.01)),console.log(u(.1)),console.log(u(1e6)),console.log(u(15)),t})()));
|
@@ -1,67 +0,0 @@
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
-
|
3
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 1`] = `"zero złotych"`;
|
4
|
-
|
5
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 2`] = `"pięć złotych"`;
|
6
|
-
|
7
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 3`] = `"dziesięć złotych"`;
|
8
|
-
|
9
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 4`] = `"jedenaście złotych"`;
|
10
|
-
|
11
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 5`] = `"piętnaście złotych"`;
|
12
|
-
|
13
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 6`] = `"dwadzieścia złotych"`;
|
14
|
-
|
15
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 7`] = `"dwadzieścia pięć złotych"`;
|
16
|
-
|
17
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 8`] = `"dziewięćdziesiąt dziewięć złotych"`;
|
18
|
-
|
19
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 9`] = `"sto złotych"`;
|
20
|
-
|
21
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 10`] = `"sto dwadzieścia trzy złote"`;
|
22
|
-
|
23
|
-
exports[`liczbySlownie konwertuje poprawnie liczby całkowite do 999 11`] = `"dziewięćset dziewięćdziesiąt dziewięć złotych"`;
|
24
|
-
|
25
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 1`] = `""`;
|
26
|
-
|
27
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 2`] = `"sto undefined"`;
|
28
|
-
|
29
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 3`] = `"dwieście undefined"`;
|
30
|
-
|
31
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 4`] = `"sto"`;
|
32
|
-
|
33
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 5`] = `"sto pięćdziesiąt"`;
|
34
|
-
|
35
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 6`] = `"dwieście"`;
|
36
|
-
|
37
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 7`] = `"pięćset"`;
|
38
|
-
|
39
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 8`] = `"sto"`;
|
40
|
-
|
41
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 9`] = `"dwieście"`;
|
42
|
-
|
43
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 10`] = `"pięćset"`;
|
44
|
-
|
45
|
-
exports[`liczbySlownie konwertuje poprawnie liczby do 1000 11`] = `"sto undefined tysiąc"`;
|
46
|
-
|
47
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 1`] = `"zero"`;
|
48
|
-
|
49
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 2`] = `" jeden"`;
|
50
|
-
|
51
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 3`] = `" dwa"`;
|
52
|
-
|
53
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 4`] = `" dziesięć"`;
|
54
|
-
|
55
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 5`] = `" piętnaście"`;
|
56
|
-
|
57
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 6`] = `" dwadzieścia"`;
|
58
|
-
|
59
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 7`] = `" pięćdziesiąt"`;
|
60
|
-
|
61
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 8`] = `" sto"`;
|
62
|
-
|
63
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 9`] = `" dwieście"`;
|
64
|
-
|
65
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 10`] = `" pięćset"`;
|
66
|
-
|
67
|
-
exports[`liczbySlownie liczbySlownie konwertuje poprawnie liczby do 1000 11`] = `" jeden tysiąc"`;
|
package/src/groszeslownie.js
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
grupy,
|
3
|
-
setki,
|
4
|
-
dziesiatki,
|
5
|
-
nascie,
|
6
|
-
jednosci,
|
7
|
-
} from "./odmianadziesiatek.js";
|
8
|
-
export function groszeSlownie(liczba) {
|
9
|
-
const licznik = liczba?.toFixed(2);
|
10
|
-
let [zloteRaw, groszeRaw] = licznik.toString().split(".");
|
11
|
-
let zlote = parseInt(zloteRaw);
|
12
|
-
let grosze = parseInt(groszeRaw || "0");
|
13
|
-
|
14
|
-
if (isNaN(zlote) || isNaN(grosze)) {
|
15
|
-
return "Niepoprawna wartość";
|
16
|
-
}
|
17
|
-
|
18
|
-
let wynik = "";
|
19
|
-
let znak = "";
|
20
|
-
if (zlote === 0 && grosze === 0) {
|
21
|
-
wynik = "zero złotych";
|
22
|
-
}
|
23
|
-
if (zlote < 0) {
|
24
|
-
znak = "minus";
|
25
|
-
zlote = -zlote;
|
26
|
-
}
|
27
|
-
|
28
|
-
let g = 0;
|
29
|
-
while (zlote > 0) {
|
30
|
-
let s = Math.floor((zlote % 1000) / 100);
|
31
|
-
let n = 0;
|
32
|
-
let d = Math.floor((zlote % 100) / 10);
|
33
|
-
let j = Math.floor(zlote % 10);
|
34
|
-
|
35
|
-
if (d == 1 && j > 0) {
|
36
|
-
n = j;
|
37
|
-
d = 0;
|
38
|
-
j = 0;
|
39
|
-
}
|
40
|
-
|
41
|
-
let k = 2;
|
42
|
-
if (j == 1 && s + d + n == 0) {
|
43
|
-
k = 0;
|
44
|
-
}
|
45
|
-
if (j == 2 || j == 3 || j == 4) {
|
46
|
-
k = 1;
|
47
|
-
}
|
48
|
-
if (s + d + n + j > 0) {
|
49
|
-
wynik =
|
50
|
-
setki[s] +
|
51
|
-
dziesiatki[d] +
|
52
|
-
nascie[n] +
|
53
|
-
jednosci[j] +
|
54
|
-
grupy[g][k] +
|
55
|
-
wynik;
|
56
|
-
}
|
57
|
-
|
58
|
-
g++;
|
59
|
-
zlote = Math.floor(zlote / 1000);
|
60
|
-
}
|
61
|
-
|
62
|
-
return wynik;
|
63
|
-
}
|
package/src/index.js
DELETED
package/src/liczbyslownie.js
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
import { odmianaZlotych } from "./odmianazlotych.js";
|
2
|
-
import { groszeSlownie } from "./groszeslownie.js";
|
3
|
-
import {
|
4
|
-
grupy,
|
5
|
-
setki,
|
6
|
-
dziesiatki,
|
7
|
-
nascie,
|
8
|
-
jednosci,
|
9
|
-
} from "./odmianadziesiatek.js";
|
10
|
-
|
11
|
-
export function liczbySlownie(liczba) {
|
12
|
-
const licznik = liczba != null ? liczba.toFixed(2) : null;
|
13
|
-
let [zloteRaw, groszeRaw] = licznik.toString().split(".");
|
14
|
-
let zlote = parseInt(zloteRaw);
|
15
|
-
const nominal = odmianaZlotych(zlote);
|
16
|
-
let grosze = parseInt(groszeRaw || "0");
|
17
|
-
|
18
|
-
if (isNaN(zlote) || isNaN(grosze)) {
|
19
|
-
return "Niepoprawna wartość";
|
20
|
-
}
|
21
|
-
|
22
|
-
let wynik = "";
|
23
|
-
let znak = "";
|
24
|
-
if (zlote === 0 && grosze === 0) {
|
25
|
-
wynik = "zero";
|
26
|
-
}
|
27
|
-
if (zlote < 0) {
|
28
|
-
znak = "minus";
|
29
|
-
zlote = -zlote;
|
30
|
-
}
|
31
|
-
|
32
|
-
let g = 0;
|
33
|
-
while (zlote > 0) {
|
34
|
-
let s = Math.floor((zlote % 1000) / 100);
|
35
|
-
let n = 0;
|
36
|
-
let d = Math.floor((zlote % 100) / 10);
|
37
|
-
let j = Math.floor(zlote % 10);
|
38
|
-
|
39
|
-
if (d == 1 && j > 0) {
|
40
|
-
n = j;
|
41
|
-
d = 0;
|
42
|
-
j = 0;
|
43
|
-
}
|
44
|
-
|
45
|
-
let k = 2;
|
46
|
-
if (j == 1 && s + d + n == 0) {
|
47
|
-
k = 0;
|
48
|
-
}
|
49
|
-
if (j == 2 || j == 3 || j == 4) {
|
50
|
-
k = 1;
|
51
|
-
}
|
52
|
-
if (s + d + n + j > 0) {
|
53
|
-
wynik =
|
54
|
-
setki[s] +
|
55
|
-
dziesiatki[d] +
|
56
|
-
nascie[n] +
|
57
|
-
jednosci[j] +
|
58
|
-
grupy[g][k] +
|
59
|
-
wynik;
|
60
|
-
}
|
61
|
-
|
62
|
-
g++;
|
63
|
-
zlote = Math.floor(zlote / 1000);
|
64
|
-
}
|
65
|
-
|
66
|
-
if (grosze === 0) {
|
67
|
-
return wynik.trim() + " " + nominal;
|
68
|
-
}
|
69
|
-
|
70
|
-
let wynikGrosze = "";
|
71
|
-
|
72
|
-
if (grosze === 1) {
|
73
|
-
wynikGrosze = "jeden grosz";
|
74
|
-
} else if (
|
75
|
-
grosze % 10 >= 2 &&
|
76
|
-
grosze % 10 <= 4 &&
|
77
|
-
Math.floor(grosze / 10) !== 1
|
78
|
-
) {
|
79
|
-
wynikGrosze = `${groszeSlownie(grosze)} grosze`;
|
80
|
-
} else {
|
81
|
-
wynikGrosze = `${groszeSlownie(grosze)} groszy`;
|
82
|
-
}
|
83
|
-
|
84
|
-
if (wynik === "") {
|
85
|
-
return znak + wynikGrosze.trim();
|
86
|
-
}
|
87
|
-
|
88
|
-
return `${wynik}${nominal} i ${wynikGrosze}`;
|
89
|
-
}
|
90
|
-
|
91
|
-
// przykłady użycia
|
92
|
-
console.log(liczbySlownie(123.45));
|
93
|
-
console.log(liczbySlownie(500));
|
94
|
-
console.log(liczbySlownie(9999.99));
|
95
|
-
console.log(liczbySlownie(0.01));
|
96
|
-
console.log(liczbySlownie(0.1));
|
97
|
-
console.log(liczbySlownie(1000000));
|
98
|
-
console.log(liczbySlownie(15));
|
@@ -1,79 +0,0 @@
|
|
1
|
-
import { liczbySlownie } from "./liczbyslownie";
|
2
|
-
|
3
|
-
describe("liczbySlownie", () => {
|
4
|
-
test("konwertuje poprawnie liczby całkowite do 999", () => {
|
5
|
-
expect(liczbySlownie(0)).toMatchSnapshot();
|
6
|
-
expect(liczbySlownie(5)).toMatchSnapshot();
|
7
|
-
expect(liczbySlownie(10)).toMatchSnapshot();
|
8
|
-
expect(liczbySlownie(11)).toMatchSnapshot();
|
9
|
-
expect(liczbySlownie(15)).toMatchSnapshot();
|
10
|
-
expect(liczbySlownie(20)).toMatchSnapshot();
|
11
|
-
expect(liczbySlownie(25)).toMatchSnapshot();
|
12
|
-
expect(liczbySlownie(99)).toMatchSnapshot();
|
13
|
-
expect(liczbySlownie(100)).toMatchSnapshot();
|
14
|
-
expect(liczbySlownie(123)).toMatchSnapshot();
|
15
|
-
expect(liczbySlownie(999)).toMatchSnapshot();
|
16
|
-
});
|
17
|
-
|
18
|
-
test("konwertuje poprawnie liczby całkowite do 999", () => {
|
19
|
-
expect(liczbySlownie(0)).toBe("zero złotych");
|
20
|
-
expect(liczbySlownie(5)).toBe("pięć złotych");
|
21
|
-
expect(liczbySlownie(10)).toBe("dziesięć złotych");
|
22
|
-
expect(liczbySlownie(11)).toBe("jedenaście złotych");
|
23
|
-
expect(liczbySlownie(15)).toBe("piętnaście złotych");
|
24
|
-
expect(liczbySlownie(20)).toBe("dwadzieścia złotych");
|
25
|
-
expect(liczbySlownie(25)).toBe("dwadzieścia pięć złotych");
|
26
|
-
expect(liczbySlownie(99)).toBe("dziewięćdziesiąt dziewięć złotych");
|
27
|
-
expect(liczbySlownie(100)).toBe("sto złotych");
|
28
|
-
expect(liczbySlownie(123)).toBe("sto dwadzieścia trzy złote");
|
29
|
-
expect(liczbySlownie(999)).toBe(
|
30
|
-
"dziewięćset dziewięćdziesiąt dziewięć złotych"
|
31
|
-
);
|
32
|
-
});
|
33
|
-
|
34
|
-
test("konwertuje poprawnie liczby powyżej 999", () => {
|
35
|
-
expect(liczbySlownie(1000)).toBe("jeden tysiąc złotych");
|
36
|
-
expect(liczbySlownie(1500)).toBe("jeden tysiąc pięćset złotych");
|
37
|
-
expect(liczbySlownie(2000)).toBe("dwa tysiące złotych");
|
38
|
-
expect(liczbySlownie(2500)).toBe("dwa tysiące pięćset złotych");
|
39
|
-
expect(liczbySlownie(9999)).toBe(
|
40
|
-
"dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć złotych"
|
41
|
-
);
|
42
|
-
expect(liczbySlownie(10000)).toBe("dziesięć tysięcy złotych");
|
43
|
-
expect(liczbySlownie(10001)).toBe("dziesięć tysięcy jeden złoty");
|
44
|
-
expect(liczbySlownie(10100)).toBe("dziesięć tysięcy sto złotych");
|
45
|
-
expect(liczbySlownie(99999)).toBe(
|
46
|
-
"dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć złotych"
|
47
|
-
);
|
48
|
-
expect(liczbySlownie(100000)).toBe("sto tysięcy złotych");
|
49
|
-
expect(liczbySlownie(100001)).toBe("sto tysięcy jeden złoty");
|
50
|
-
expect(liczbySlownie(101000)).toBe("sto jeden tysięcy złotych");
|
51
|
-
expect(liczbySlownie(110000)).toBe("sto dziesięć tysięcy złotych");
|
52
|
-
expect(liczbySlownie(200000)).toBe("dwieście tysięcy złotych");
|
53
|
-
expect(liczbySlownie(300000)).toBe("trzysta tysięcy złotych");
|
54
|
-
expect(liczbySlownie(400000)).toBe("czterysta tysięcy złotych");
|
55
|
-
expect(liczbySlownie(500000)).toBe("pięćset tysięcy złotych");
|
56
|
-
expect(liczbySlownie(600000)).toBe("sześćset tysięcy złotych");
|
57
|
-
expect(liczbySlownie(700000)).toBe("siedemset tysięcy złotych");
|
58
|
-
expect(liczbySlownie(800000)).toBe("osiemset tysięcy złotych");
|
59
|
-
expect(liczbySlownie(900000)).toBe("dziewięćset tysięcy złotych");
|
60
|
-
expect(liczbySlownie(1000000)).toBe("jeden milion złotych");
|
61
|
-
expect(liczbySlownie(1000000000)).toBe("jeden miliard złotych");
|
62
|
-
expect(liczbySlownie(2000000000)).toBe("dwa miliardy złotych");
|
63
|
-
});
|
64
|
-
});
|
65
|
-
|
66
|
-
// testy dla groszy
|
67
|
-
describe("liczbySlownie dla groszy", () => {
|
68
|
-
test("konwertuje poprawnie liczby z groszami", () => {
|
69
|
-
expect(liczbySlownie(0.01)).toBe("jeden grosz");
|
70
|
-
expect(liczbySlownie(0.05)).toBe("pięć groszy");
|
71
|
-
expect(liczbySlownie(0.1)).toBe("dziesięć groszy");
|
72
|
-
expect(liczbySlownie(0.11)).toBe("jedenaście groszy");
|
73
|
-
expect(liczbySlownie(0.15)).toBe("piętnaście groszy");
|
74
|
-
expect(liczbySlownie(0.2)).toBe("dwadzieścia groszy");
|
75
|
-
expect(liczbySlownie(0.25)).toBe("dwadzieścia pięć groszy");
|
76
|
-
expect(liczbySlownie(0.34)).toBe("trzydzieści cztery grosze");
|
77
|
-
expect(liczbySlownie(0.99)).toBe("dziewięćdziesiąt dziewięć groszy");
|
78
|
-
});
|
79
|
-
});
|
package/src/odmianadziesiatek.js
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
export const jednosci = [
|
2
|
-
"",
|
3
|
-
" jeden",
|
4
|
-
" dwa",
|
5
|
-
" trzy",
|
6
|
-
" cztery",
|
7
|
-
" pięć",
|
8
|
-
" sześć",
|
9
|
-
" siedem",
|
10
|
-
" osiem",
|
11
|
-
" dziewięć",
|
12
|
-
];
|
13
|
-
export const nascie = [
|
14
|
-
"",
|
15
|
-
" jedenaście",
|
16
|
-
" dwanaście",
|
17
|
-
" trzynaście",
|
18
|
-
" czternaście",
|
19
|
-
" piętnaście",
|
20
|
-
" szesnaście",
|
21
|
-
" siedemnaście",
|
22
|
-
" osiemnaście",
|
23
|
-
" dziewiętnaście",
|
24
|
-
];
|
25
|
-
export const dziesiatki = [
|
26
|
-
"",
|
27
|
-
" dziesięć",
|
28
|
-
" dwadzieścia",
|
29
|
-
" trzydzieści",
|
30
|
-
" czterdzieści",
|
31
|
-
" pięćdziesiąt",
|
32
|
-
" sześćdziesiąt",
|
33
|
-
" siedemdziesiąt",
|
34
|
-
" osiemdziesiąt",
|
35
|
-
" dziewięćdziesiąt",
|
36
|
-
];
|
37
|
-
export const setki = [
|
38
|
-
"",
|
39
|
-
" sto",
|
40
|
-
" dwieście",
|
41
|
-
" trzysta",
|
42
|
-
" czterysta",
|
43
|
-
" pięćset",
|
44
|
-
" sześćset",
|
45
|
-
" siedemset",
|
46
|
-
" osiemset",
|
47
|
-
" dziewięćset",
|
48
|
-
];
|
49
|
-
export const grupy = [
|
50
|
-
["", "", ""],
|
51
|
-
[" tysiąc", " tysiące", " tysięcy"],
|
52
|
-
[" milion", " miliony", " milionów"],
|
53
|
-
[" miliard", " miliardy", " miliardów"],
|
54
|
-
[" bilion", " biliony", " bilionów"],
|
55
|
-
[" biliard", " biliardy", " biliardów"],
|
56
|
-
[" trylion", " tryliony", " trylionów"],
|
57
|
-
];
|
package/src/odmianazlotych.js
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
export function odmianaZlotych(zlote) {
|
2
|
-
let nominal;
|
3
|
-
|
4
|
-
if (zlote % 10 === 1 && zlote % 100 !== 11) {
|
5
|
-
nominal = "złoty";
|
6
|
-
} else if (
|
7
|
-
zlote % 10 >= 2 &&
|
8
|
-
zlote % 10 <= 4 &&
|
9
|
-
!(zlote % 100 >= 12 && zlote % 100 <= 14)
|
10
|
-
) {
|
11
|
-
nominal = "złote";
|
12
|
-
} else {
|
13
|
-
nominal = "złotych";
|
14
|
-
}
|
15
|
-
|
16
|
-
return `${nominal}`;
|
17
|
-
}
|
package/webpack.config.cjs
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
const path = require("path");
|
2
|
-
|
3
|
-
module.exports = {
|
4
|
-
entry: "./src/liczbyslownie.js",
|
5
|
-
output: {
|
6
|
-
filename: "liczbyslownie.js",
|
7
|
-
path: path.resolve(__dirname, "dist"),
|
8
|
-
library: "liczbyslowniepopolsku",
|
9
|
-
libraryTarget: "umd",
|
10
|
-
},
|
11
|
-
module: {
|
12
|
-
rules: [
|
13
|
-
{
|
14
|
-
test: /\.js$/,
|
15
|
-
exclude: /(node_modules|bower_components)/,
|
16
|
-
use: {
|
17
|
-
loader: "babel-loader",
|
18
|
-
options: {
|
19
|
-
presets: ["@babel/preset-env"],
|
20
|
-
},
|
21
|
-
},
|
22
|
-
},
|
23
|
-
],
|
24
|
-
},
|
25
|
-
};
|