μετατροπη αριθμου ολογραφωσ

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
quit
Δημοσιεύσεις: 147
Εγγραφή: 09 Δεκ 2008 11:54

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από quit » 10 Νοέμ 2010 15:02

καλησπερα παιδια, φτιαχνω μια εφαρμογή όπου έχω για παράδειγμα τον αριθμό 123,14 και θέλω να τον εμφανιζω ολογράφως όπως στα τιμολογια δηλαδή:
ΕΚΑΤΟ ΕΙΚΟΣΙ ΤΡΙΑ ΕΥΡΩ ΚΑΙ ΔΕΚΑ ΤΕΣΣΕΡΑ ΛΕΠΤΑ.
μήπως μπορείτε να με κατατοπίσετε στο πως γίνετε αυτό?
ευχαριστώ.

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από Khronos » 10 Νοέμ 2010 15:13

Καταρχήν πρέπει να σκεφτείς τον αλγόριθμο που θα κάνει τη μετατροπή.

Πχ. εγώ θα το έκανα κάπως έτσι:

1) Θα χώριζα τον αριθμό σε ακέραιο κ δεκαδικό μέρος.
2) Ανάλογα με τον αριθμό των ψηφίων και το τι αριθμός είναι κάθε ψηφίο, θα καθόριζα την ονομασία του.
πχ. 123,45
ακέραιο μέρος: 123
αριθμός ψηφίων 3, άρα μιλάμε για εκατοντάδες.
πρώτο ψηφίο 1, αρα, ΕΚΑΤΟ

Με το ίδιο σκεπτικό θα έκανα και τα υπόλοιπα.

quit
Δημοσιεύσεις: 147
Εγγραφή: 09 Δεκ 2008 11:54

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από quit » 10 Νοέμ 2010 16:16

καταρχην ευχαριστω πολύ! πως θα ελεξω τα ψηφία πριν και μετα την υποδιαστολη? υπαρχει κάποια ετοιμη συναρτηση?

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από Khronos » 10 Νοέμ 2010 16:19


quit
Δημοσιεύσεις: 147
Εγγραφή: 09 Δεκ 2008 11:54

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από quit » 10 Νοέμ 2010 16:30

δεν πιστευω οτι κάνει δουλια η explode.γιατι αν πάρεις το πρωτο πεδιο του πινακα που επιστρεφει σου εμφανιζει τον αριθμο πριν την υποδιαστολη. Ας πουμε οτι μας χρησιμεθει πως θα μετρησω τα ψηφια πριν την υποδιαστολη?

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από Khronos » 10 Νοέμ 2010 16:35


quit
Δημοσιεύσεις: 147
Εγγραφή: 09 Δεκ 2008 11:54

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από quit » 10 Νοέμ 2010 16:55

thanks mate!!

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από dva_dev » 10 Νοέμ 2010 18:23

Αν μπορείς να διαβάσεις κώδικα C# και να γράψεις κώδικα php, ίσως σου φανεί χρήσιμος ο κώδικας στο http://dvassil.wordpress.com/2008/05/29/euro-verbal/

Κάτι έτοιμο για (όχι σε) php υπάρχει σε php extension. Αν ενδιαφέρεσαι: http://www.freestuff.gr/forums/viewtopic.php?t=45687

Άβαταρ μέλους
Kainourios
Ruby Moderator
Δημοσιεύσεις: 504
Εγγραφή: 18 Μάιος 2005 16:20
Τοποθεσία: Κορυδαλλός
Επικοινωνία:

μετατροπη αριθμου ολογραφωσ

Δημοσίευση από Kainourios » 10 Νοέμ 2010 22:19

Ίσως σε βοηθήσει το παρακάτω. Είναι σε ruby, δεν κάνει ακριβώς αυτό που θες ούτε υπολογίζει τα δεκάδικά αλλά μπορεί να τροποποιηθεί για να το κάνει (το έβαλα για να πάρεις μια ιδέα). Το είχα βρει από το site project euler και μου είχε φανεί πολύ elegant :).

Κώδικας: Επιλογή όλων

def speak(n)
return speak(n/1_000_000_000) + "billion " + speak(n%1_000_000_000) if n>=1_000_000_000
return speak(n/1_000_000) + "million " + speak(n%1_000_000) if n>=1_000_000
return speak(n/1_000) + "thousand " + speak(n%1_000) if n>=1_000
return speak(n/100) + "hundred " if n>=100 and n%100==0
return speak(n/100) + "hundred and " + speak(n%100) if n>=100
return "ninety " + speak(n%10) if n>=90
return "eighty " + speak(n%10) if n>=80
return "seventy " + speak(n%10) if n>=70
return "sixty " + speak(n%10) if n>=60
return "fifty " + speak(n%10) if n>=50
return "forty " + speak(n%10) if n>=40
return "thirty " + speak(n%10) if n>=30
return "twenty " + speak(n%10) if n>=20
return "one " if n==1
return "two " if n==2
return "three " if n==3
return "four " if n==4
return "five " if n==5
return "six " if n==6
return "seven " if n==7
return "eight " if n==8
return "nine " if n==9
return "ten " if n==10
return "eleven " if n==11
return "twelve " if n==12
return "thirteen " if n==13
return "fourteen " if n==14
return "fifteen " if n==15
return "sixteen " if n==16
return "seventeen " if n==17
return "eighteen " if n==18
return "nineteen " if n==19
return ""
end 


# Για test και τρόπος λειτουργίας
assert "one ", speak(1)
assert "fifteen ", speak(15)
assert "twenty one ", speak(21)
assert "ninety nine ", speak(99)
assert "one hundred ", speak(100)
assert "nine hundred and ninety nine ", speak(999) 
assert "one million two hundred and thirty four thousand five hundred and sixty seven ", speak(1234567) 


Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες