Untitled

 avatar
unknown
javascript
18 days ago
6.9 kB
3
Indexable
<!DOCTYPE html>
<html lang="pl">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Konwerter liczby na słowa</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            padding: 20px;
        }

        input,
        button {
            padding: 10px;
            margin: 5px;
            font-size: 16px;
        }

        #wynik {
            margin-top: 20px;
            font-weight: bold;
        }
    </style>
</head>

<body>

    <h1>Konwerter liczby na słowa</h1>

    <label for="kwota">Podaj kwotę (np. 1.20): </label>
    <input type="text" id="kwota" placeholder="Wpisz kwotę" />
    <button onclick="pokazWynik()">Przekształć na słowa</button>

    <div id="wynik"></div>

    <script>
        function odmianaZlotych(liczba) {
            let ostatniaCyfra = Number(liczba.slice(-1)); // ostatnia cyfra
            let dwieOstatnieCyfry = Number(liczba.slice(-2)); // dwie ostatnie cyfry

            // Specjalny przypadek dla liczby 1
            if (liczba === '1') return 'złoty';

            // Specjalny przypadek dla liczb od 11 do 19
            if (dwieOstatnieCyfry >= 11 && dwieOstatnieCyfry <= 19) return 'złotych';

            // Liczby kończące się na 1 (np. 21, 31, 41...)
            if (ostatniaCyfra === 1) return 'złoty';

            // Liczby kończące się na 2, 3, 4, ale nie 12, 13, 14 (np. 22, 23, 24...)
            if (ostatniaCyfra >= 2 && ostatniaCyfra <= 4) return 'złote';

            // Domyślnie dla innych liczb (np. 5, 6, 10, 15 itd.)
            return 'złotych';
        }

        function odmianaGroszy(liczba) {
            let ostatniaCyfra = Number(liczba.slice(-1));
            let dwieOstatnieCyfry = Number(liczba.slice(-2));

            // Specjalny przypadek dla liczby 1
            if (liczba === '01') return 'grosz';

            // Specjalny przypadek dla liczb od 11 do 19
            if (dwieOstatnieCyfry >= 11 && dwieOstatnieCyfry <= 19) return 'groszy';

            // Liczby kończące się na 1 (np. 21, 31, 41...) - w tym przypadku "groszy"
            if (ostatniaCyfra === 1) return 'grosz';

            // Liczby kończące się na 2, 3, 4, ale nie 12, 13, 14 (np. 22, 23, 24...)
            if (ostatniaCyfra >= 2 && ostatniaCyfra <= 4) return 'grosze';

            // Domyślnie dla innych liczb (np. 5, 6, 10, 15 itd.)
            return 'groszy';
        }

        function odmianaJednostki(index, liczba) {
            const jednostki = ['tysiąc', 'milion', 'miliard', 'bilion', 'biliard'];

            if (index === 0) return '';  // Liczby poniżej tysiąca nie mają jednostek
            let ostatniaCyfra = Number(liczba.slice(-1));
            let dwieOstatnieCyfry = Number(liczba.slice(-2));

            if (index === 1) {
                if (liczba === '1') return 'tysiąc';
                if (ostatniaCyfra >= 2 && ostatniaCyfra <= 4 && (dwieOstatnieCyfry < 12 || dwieOstatnieCyfry > 14)) return 'tysiące';
                return 'tysięcy';
            }
            if (index === 2) {
                if (liczba === '1') return 'milion';
                if (ostatniaCyfra >= 2 && ostatniaCyfra <= 4 && (dwieOstatnieCyfry < 12 || dwieOstatnieCyfry > 14)) return 'miliony';
                return 'milionów';
            }
            if (index === 3) {
                if (liczba === '1') return 'miliard';
                if (ostatniaCyfra >= 2 && ostatniaCyfra <= 4 && (dwieOstatnieCyfry < 12 || dwieOstatnieCyfry > 14)) return 'miliardy';
                return 'miliardów';
            }
            // Dla innych jednostek, dodajemy "ów" (biliony, biliardy)
            return jednostki[index] + 'ów';
        }

        function liczbaNaSlowa(liczba) {
            if (liczba === '0') return 'zero';
            let slowa = [];
            let jednostki = ['tysiąc', 'milion', 'miliard', 'bilion', 'biliard']; // Tutaj dodajemy jednostki
            let jednostkiIndeks = 0;

            while (liczba.length > 0) {
                let czesc = liczba.slice(-3); // Bierzemy ostatnie 3 cyfry
                let liczbaInt = parseInt(czesc, 10); // Zamieniamy na liczbę
                if (liczbaInt > 0) {
                    let czescSlowa = [];
                    let h = Math.floor(liczbaInt / 100);
                    liczbaInt %= 100;
                    if (h > 0) czescSlowa.push(setki[h]);

                    if (liczbaInt >= 10 && liczbaInt < 20) {
                        czescSlowa.push(liczby10do19[liczbaInt - 10]);
                    } else {
                        let t = Math.floor(liczbaInt / 10);
                        let o = liczbaInt % 10;
                        if (t > 0) czescSlowa.push(dziesiatki[t]);
                        if (o > 0) czescSlowa.push(jednosci[o]);
                    }
                    slowa.unshift(czescSlowa.join(' ').trim() + ' ' + odmianaJednostki(jednostkiIndeks, czesc));
                }
                liczba = liczba.slice(0, -3); // Usuwamy ostatnie 3 cyfry
                jednostkiIndeks++;
            }
            return slowa.join(' ').trim();
        }

        const jednosci = ['zero', 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć'];
        const liczby10do19 = ['dziesięć', 'jedenaście', 'dwanaście', 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedemnaście', 'osiemnaście', 'dziewiętnaście'];
        const dziesiatki = ['', '', 'dwadzieścia', 'trzydzieści', 'czterdzieści', 'pięćdziesiąt', 'sześćdziesiąt', 'siedemdziesiąt', 'osiemdziesiąt', 'dziewięćdziesiąt'];
        const setki = ['', 'sto', 'dwieście', 'trzysta', 'czterysta', 'pięćset', 'sześćset', 'siedemset', 'osiemset', 'dziewięćset'];

        function konwertujKwoteNaSlowa(kwota) {
            kwota = String(kwota).replace(',', '.'); // Zamieniamy przecinek na kropkę
            let [calosc, ulamki] = kwota.split('.');
            ulamki = (ulamki || '00').padEnd(2, '0');

            let caloscSlowa = liczbaNaSlowa(calosc);
            let ulamkiSlowa = liczbaNaSlowa(ulamki);

            let wynik = `${caloscSlowa} ${odmianaZlotych(calosc)}`;
            if (parseInt(ulamki) > 0) {
                wynik += ` i ${ulamkiSlowa} ${odmianaGroszy(ulamki)}`;
            } else {
                wynik += ' i zero groszy';
            }

            return wynik;
        }

        function pokazWynik() {
            let kwota = document.getElementById('kwota').value;
            let wynik = konwertujKwoteNaSlowa(kwota);
            document.getElementById('wynik').textContent = wynik;
        }
    </script>

</body>

</html>
Leave a Comment