liczbyslowniepopolsku
Version:
Nowoczesna biblioteka do zamiany liczb na zapis słowny w języku polskim
111 lines (110 loc) • 3.11 kB
JavaScript
var h = Object.defineProperty;
var f = (a, i, t) => i in a ? h(a, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[i] = t;
var y = (a, i, t) => f(a, typeof i != "symbol" ? i + "" : i, t);
const p = {
odmiana: {
jeden: "",
dwa: "y",
piec: ""
},
separator: " ",
groszeSeparator: " i "
}, l = [
"",
"jeden",
"dwa",
"trzy",
"cztery",
"pięć",
"sześć",
"siedem",
"osiem",
"dziewięć"
], m = [
"dziesięć",
"jedenaście",
"dwanaście",
"trzynaście",
"czternaście",
"piętnaście",
"szesnaście",
"siedemnaście",
"osiemnaście",
"dziewiętnaście"
], w = [
"",
"",
"dwadzieścia",
"trzydzieści",
"czterdzieści",
"pięćdziesiąt",
"sześćdziesiąt",
"siedemdziesiąt",
"osiemdziesiąt",
"dziewięćdziesiąt"
], j = [
"",
"sto",
"dwieście",
"trzysta",
"czterysta",
"pięćset",
"sześćset",
"siedemset",
"osiemset",
"dziewięćset"
];
class g {
constructor(i = {}) {
y(this, "konfiguracja");
this.konfiguracja = { ...p, ...i };
}
liczbySlownie(i) {
if (i === 0) return "zero";
const t = i < 0;
let e = Math.abs(i);
const s = [];
if (e >= 1e9) {
const n = Math.floor(e / 1e9), r = this.przetworzGrupe(n, "miliard", "miliardy", "miliardów");
r && s.push(r), e %= 1e9;
}
if (e >= 1e6) {
const n = Math.floor(e / 1e6), r = this.przetworzGrupe(n, "milion", "miliony", "milionów");
r && s.push(r), e %= 1e6;
}
if (e >= 1e3) {
const n = Math.floor(e / 1e3), r = this.przetworzGrupe(n, "tysiąc", "tysiące", "tysięcy");
r && s.push(r), e %= 1e3;
}
if (e > 0) {
const n = this.przetworzGrupe(e, "", "", "");
n && s.push(n);
}
let o = s.filter(Boolean).join(this.konfiguracja.separator);
return t && (o = "minus" + (o ? this.konfiguracja.separator + o : "")), o;
}
kwotaSlownie(i) {
const t = i < 0, e = Math.floor(Math.abs(i)), s = Math.round((Math.abs(i) - e) * 100);
let o = "";
return t && (o += "minus "), o += this.liczbySlownie(e) + " " + this.odmianaZlotych(e), s > 0 && (o += this.konfiguracja.groszeSeparator + this.liczbySlownie(s) + " " + this.odmianaGroszy(s)), o;
}
przetworzGrupe(i, t, e, s) {
if (i === 0) return "";
const o = Math.floor(i / 100), n = Math.floor(i % 100 / 10), r = i % 10, z = i % 100, c = [];
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]));
const u = c.filter(Boolean).join(this.konfiguracja.separator), d = this.odmianaLiczby(i, t, e, s);
return d ? !u || i === 1 && t === "tysiąc" ? d : u + this.konfiguracja.separator + d : u;
}
odmianaLiczby(i, t, e, s) {
return !t && !e && !s ? "" : i === 1 ? t : i % 100 >= 12 && i % 100 <= 14 ? s : i % 10 >= 2 && i % 10 <= 4 ? e : s;
}
odmianaZlotych(i) {
return this.odmianaLiczby(i, "złoty", "złote", "złotych");
}
odmianaGroszy(i) {
return this.odmianaLiczby(i, "grosz", "grosze", "groszy");
}
}
export {
g as LiczbySlownie
};