![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 330 Pomógł: 0 Dołączył: 25.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Szukam funkcji która bedzie cene, na tekst po angielsku czyli np "25" na twenty five
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
Kilka funkcji http://funkcje.net/view/2/1628/index.html
Wystarczy przetłumaczyć wszystko na angielskie słowa. |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Na angielski jest jeszcze prościej niż na polski. Nie ma bowiem choćby osiemset, siedemset ale jest siedem setek (IMG:style_emoticons/default/smile.gif) Jedynie przy kilkanaście trzeba mieć coś osobnego. A tak bierzesz liczbę i lecisz algorytmem
1. Dzielisz liczbę przez 10 do potęgi (3*dowolna_maksymalna) 3->miliardy, 2->miliony, 1->tysiące 2. Jeśli większe od 1000, podnosisz potęgę, 3. Jeśli mniejsze od 1 to obniżamy potęgę o 1 -> jeszcze raz sprawdzamy 3 4. Dzielisz część całkowitą z dzielenia przez 100. Sprawdzasz też czy cała ta liczba jest większa od 1 bo to determinuje czy dodasz na końcu rzędu końcówkę s, bo wtedy, przykładowo, nie million, ale millions 5. Jeśli większe od 0, to tyle masz setek, ale jeśli to 1 to nie dodajesz literki s na końcu setek 6. Reszta z dzielenia przez 100 sprawdzamy czy większe od 19 7. Jeśli tak, to dzielimy przez 10 i mamy liczbę dziesiątek a modulo z dzielenia przez dziesięć to liczba jedności 8. Jeśli nie, to wpisujemy słowo od 1 do 19 z tablicy i dodajemy oznaczenie potęgi 9. Reszta z dzielenia liczby przez daną potęgę to nasza nowa liczba. 10. Sprawdzamy czy mniejsza od 1. Jeśli tak to koniec 11. Jeśli nie -> wracamy do kroku 3 Przykład: 219.457 Potęga maks to 3: liczba / 10^(3*3) = 219.457/1.000.000.000 < 1 -> obniżamy potęgę bo to nie miliardy liczba / 10^(3*2) = 219.457/1.000.000 < 1 -> obniżamy potęgę bo to nie miliony liczba / 10^(3*1) = 219.457/1.000, w końcu zakres większy od 1 i mniejszy od 1000 219.457/1.000 = 219,457, całkowita -> 219 (czyli dodamy końcówkę s bo większe niż 1) 219 / 100 = całkowite -> 2 (two hundreds) 219 modulo 100 = 19 19 wpada w zakres, czyli na sztywno dopisujemy (nineteen) i dopisujemy oznaczenie potęgi czyli "thousands" Liczymy resztę z liczby dzielenia przez 1.000 i mamy 457 Powtarzamy to i otrzymujemy odpowiednio: four hundreds, fifty, seven Dla Ciebie już pozostawiam jedynie banalny problem kiedy wstawia się pomiędzy wyrazy słówko "and" (IMG:style_emoticons/default/winksmiley.jpg) EDIT: Nie wyjaśniłem czemu mam 2 i 3 choć wzajemnie się wykluczają i robi się nadmiarowe pętle. To zabezpieczenie przed zbyt małym maksymalnym. Jeśli masz bowiem miliony a ustawisz na start maksymalnie tysiące, to masz problem. Ale jeśli startujesz od bilionów to możesz śmiało krok 2 odpuścić sobie. Taki algorytm pozwala ominąć "puste przestrzenie" jak choćby w 123.000.056 gdzie nie ma wcale partii "tysiące" (IMG:style_emoticons/default/smile.gif) Od razu z milionów wskoczy do setek. EDIT2: Bym zapomniał... W ten sposób potrzebne Ci tablice skracają się do: potęgowych określeń: array([0]=> '', [1] => 'thousand', [2] => 'million', [3]=> 'billion'); określeń dziesiątek od 20 wzwyż: array([2]=> 'twenty', [3]=> 'thirty', [4] => 'forty',(...), [9] => 'ninty' ); liczb od 1 do 19: array([1]=>'one', [2] => 'two', (...), [19] => 'nineteen') Reszta to dodawanie końcówki "s: i "and" w odpowiednich miejscach algorytmu... Ten post edytował thek 20.11.2009, 00:44:26 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 28.09.2025 - 14:10 |