Untitled
unknown
javascript
a year ago
6.9 kB
7
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>Editor is loading...
Leave a Comment