Untitled
<!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