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 CHANGED
@@ -1,34 +1,71 @@
1
- # Przekształcanie liczb na słowa
1
+ # Liczby Słownie po Polsku
2
2
 
3
- <p>Ten projekt umożliwia przekształcenie liczby na jej słowną reprezentację. Na przykład, podając 1234 jako argument, zwrócona zostanie wartość "jeden tysiąc dwieście trzydzieści cztery".</p>
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
- ## Jak używać
5
+ ## Instalacja
6
6
 
7
- <p>Aby korzystać z tego projektu, należy wywołać funkcję liczbySlownie z odpowiednim argumentem.</p>
8
- <br>
9
- <p>Funkcja liczbySlownie przyjmuje argument typu number i zwraca słowną reprezentację liczby.</p>
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
- console.log(liczbySlownie(1234));
15
- // Zwraca "jeden tysiąc dwieście trzydzieści cztery"
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
- ## Jak działa
51
+ ## Wsparcie dla TypeScript
19
52
 
20
- <p>Projekt działa poprzez dzielenie liczby na grupy cyfr - zawsze po trzy cyfry. Następnie każda z tych grup jest przetwarzana, a ich słowna reprezentacja jest dodawana do wyniku.</p>
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
- ## Co zawiera
55
+ ## Testy
25
56
 
26
- <p>Projekt zawiera moduł liczbySlownie, który eksportuje funkcję liczbySlownie. Moduł zapis zawiera stałe używane przez funkcję liczbySlownie, takie jak słowne reprezentacje jednostek, dziesiątek, setek, itd.</p>
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
- ## Jak uruchomić
65
+ ## Licencja
29
66
 
30
- <p>Aby uruchomić projekt, należy zainstalować zależności poprzez wywołanie polecenia npm install, a następnie wywołać skrypt start poleceniem npm start.</p>
67
+ MIT
31
68
 
32
69
  ## Autor
33
70
 
34
- <p>Ten projekt został stworzony przez Konrad Gruca.</p>
71
+ Konrad Tytus Gruca
@@ -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": "1.0.8",
4
- "description": "Zamien liczby na zapis slowny",
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
- "author": "Konrad Tytus Gruca",
8
- "license": "MIT",
6
+ "main": "./dist/index.umd.js",
7
+ "module": "./dist/index.es.js",
8
+ "types": "./dist/index.d.ts",
9
9
  "exports": {
10
- "./src/liczbyslownie.js": {
11
- "import": "./src/liczbyslownie.js",
12
- "require": "./src/liczbyslownie.js"
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
- "test": "jest"
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
- "jest": "^29.5.0",
24
- "webpack": "^5.76.1",
25
- "webpack-cli": "^5.0.1"
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
- "dependencies": {
28
- "@babel/cli": "^7.21.0",
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
@@ -1,4 +0,0 @@
1
- {
2
- "presets": ["@babel/preset-env"]
3
- }
4
-
@@ -1,8 +0,0 @@
1
- {
2
- "cSpell.words": [
3
- "argumentem",
4
- "Przekształcanie",
5
- "reprezentację",
6
- "używać"
7
- ]
8
- }
@@ -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"`;
@@ -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
@@ -1,3 +0,0 @@
1
- const liczbySlownie = require("./liczbyslownie");
2
-
3
- module.exports = liczbySlownie;
@@ -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
- });
@@ -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
- ];
@@ -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
- }
@@ -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
- };