• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana liczby cyfrą na liczbę słowami

Object Storage Arubacloud
0 głosów
359 wizyt
pytanie zadane 9 września 2019 w PHP przez Kamil Czech Dyskutant (7,700 p.)

Witam,

chcę zrobić stronę na której użytkownik może wpisać liczbę cyfrą a strona zamieni na liczbę napisaną słowami, lecz nie wiem jak się za to zabrać.

Coś podobnego jak ta strona

http://kwotaslownie.pl/

Dziękuję za pomoc

1 odpowiedź

+2 głosów
odpowiedź 9 września 2019 przez tangarr Mędrzec (154,860 p.)
wybrane 12 września 2019 przez Kamil Czech
 
Najlepsza
Najpierw rozważ jak to zrobić dla liczb z przedziałów 0-9 i 10-19, następnie obsłuż przedział 20-99.
Później używając analogicznych metod będziesz mógł obsłużyć przedział 100-999.
W tym momencie powinieneś zdać sobie sprawę jak dodać obsługę tysięcy, milionów, miliardów itd.
Najlepiej rozpisz sobie początek na kartce i szukaj zależności. Zauważ że np dla liczby 1234 piszesz tysiąc coś, a dla liczby 5234 piszesz pięć tysięcy coś. Ta zależność będzie się powtarzać dla kolejnych liczebników głównych.
komentarz 11 września 2019 przez Kamil Czech Dyskutant (7,700 p.)
A mógłbyś dać jakiś przykład kodu ???
komentarz 11 września 2019 przez tangarr Mędrzec (154,860 p.)

Nie znam PHP. Ale, że trochę mi się nudziło przygotowałem pseudokod
 

funkcja napis_1_19(liczba) {
    if (liczba < 1 OR liczba > 19) rzuć_wyjątek("zły argument")
    if (liczba == 1) return "jeden"
    if (liczba == 2) return "dwa"
    ...
    if (liczba == 19) return "dziewiętnaście"
}

funkcja napis_dziesiatki(liczba) {
    if (liczba < 2 OR liczba > 9) rzuć_wyjątek("zły argument")
    if (liczba == 2) return "dwadzieścia"
    ...
    if (liczba == 9) return "dziewięćdziesiąt"
}

funkcja napis_setki(liczba) {
    // analogicznie
}

funkcja napis_1_99(liczba) {
    if (liczba <= 19) return napis_1_19(liczba)
    if (liczba > 99) rzuć_wyjątek("zły argument")
    dziesiatki = liczba / 10
    jednosci = liczba modulo 10

    wynik = napis_dziesiatki(dziesiatki)
    if (jednosci == 0) return wynik
    wynik = wynik + " " + napis_1_19(jednosci)
}

funkcja napis_1_999(liczba) {
    // analogicznie jak napis_1_99
    // obliczasz setki i reszte z przedzialu 0 - 99
}

funkcja odmien_liczebnik_tysiac(liczba) {
    if (liczba == 1) return "tysiąc"
    jednosci = liczba modulo 10
    if (jednosci == 2 OR jednosci == 3 OR jednosci == 4) return "tysiące"
    return "tysięcy"
}

funkcja napis_tysiace(liczba) {
    if (liczba < 1 OR liczba > 999999) rzuć_wyjątek("zły argument")
    tysiace = liczba / 1000
    reszta = liczba modulo 1000

    wynik = napis_1_999(tysiace) + " " + odmien_liczebnik(tysiace)
    if (reszta == 0) return wynik
    wynik = wynik + " " + napis_1_999(reszta)
    return wynik
}

funkcja napis_miliony(liczba) {
    // analogicznie
}

funkcja konwertuj_liczbe_na_napis(liczba) {
    if (liczba == 0) return "zero"
    if (liczba < 0) return "minus " + napis_miliony(-liczba)
    return napis_miliony(liczba)
}

 

komentarz 12 września 2019 przez Kamil Czech Dyskutant (7,700 p.)

Coś tu nie działa:

Parse error: syntax error, unexpected 'napis_1_19' (T_STRING) in C:\xampp\htdocs\liczbaslowa\przeliczik.php on line 4

komentarz 12 września 2019 przez Chess Szeryf (76,710 p.)

Najlepiej byłoby to chyba na switchu napisać, a nie na ifie.

<?php
$number = 10;

switch($number) {
  case 0:
    echo 'zero';
    break;
  case 1:
    echo 'jeden';
    break;
  case 2:
    echo 'dwa';
    break;
    // (...) And so on.
}
?>

@Kamil Czech, bo ma nie działać. Przecież wyraźnie napisał, że to pseudokod. Musisz na podstawie tego kodu napisać swój.

komentarz 12 września 2019 przez Kamil Czech Dyskutant (7,700 p.)

Dzięki działa wink

komentarz 13 września 2019 przez Kamil Czech Dyskutant (7,700 p.)

@Chess, A co z większymi liczbami, potrzebuję zrobić od 0.01 do 30000 więc wychodzi ponad 300000 możliwości ???

komentarz 13 września 2019 przez Chess Szeryf (76,710 p.)
edycja 13 września 2019 przez Chess

Raczej nie. Musisz napisać odpowiedni algorytm, poszukaj zależności. Tutaj masz jak, to może wyglądać od strony algorytmu. Nie musisz bazować na gotowcach. Rozpisz sobie na kartce krok po kroku jak zamieniać poszczególne liczby na wyrazy i tyle. W tym źródle jest opisane, że pierwsza forma z liczby równa, powyżej 1000 jest chyba tak odmieniana jak poniżej.

1000 - jeden tysiąc, 2000 - dwa tysiące, 3000 - trzy tysiące, 4000 - cztery tysiące, 5000 - pięć tysięcy, itd.

komentarz 15 września 2019 przez Kamil Czech Dyskutant (7,700 p.)
A jak zrobić przedziały ?

np. od 1 do 1.99 ma pisać Jeden

od 2 do 2.99 ma pisać dwa

i tak dalej
1
komentarz 15 września 2019 przez Chess Szeryf (76,710 p.)

Masz wymyślić algorytm do tego. Część przed przecinkiem i po możesz wyłuskać w ten sposób.

<?php

$n = 1.99;

// sscanf($n, "%d")[0] => 1
// sscanf($n, "%f")[0] => 0.99


switch(sscanf($n, "%d")[0]) {
  case 1:
    echo 'one';
    break;
  case 2:
    echo 'two'; 
    break;
}

?>

Może zamiast sscanf lepiej byłoby użyć jakiś truncate, ale jak do tej pory nie znalazłem w PHP takowej instrukcji.

Podobne pytania

0 głosów
2 odpowiedzi 150 wizyt
pytanie zadane 30 listopada 2023 w C i C++ przez maxkolanko1998 Gaduła (3,230 p.)
0 głosów
4 odpowiedzi 1,609 wizyt
pytanie zadane 9 października 2018 w JavaScript przez masterfiletable2 Nowicjusz (150 p.)
0 głosów
1 odpowiedź 261 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez mn130496 Gaduła (3,530 p.)

92,632 zapytań

141,502 odpowiedzi

319,882 komentarzy

62,015 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...