![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.517
|
Hallo, ich schreibe es mal hier rein, anstatt in das Gesuche-Forum, weil ich nicht genau weiß, ob ich etwas Fertiges suche oder es besser selbst implementieren sollte. Es geht um eine Internationalisierung und im Speziellen um die Darstellung bzw. die interne Speicherung von Zahlenwerten und hier selbstredend Dezimalzahlen. Damit PHP und MySQL mit den Werten rechnen können, ist die hier dokumentierte Form intern zu verwenden. Code: $a = 1.234; Für die Ausgabe gibt es neben den PHP-Lösungen number_format(), money_format(), sprintf() natürlich auch fertige Lösungen, z.B. bei PEAR. Mir geht es aber eher um die "Eingabe". Wenn ich über ein Formular "1,124.56" oder "1.123,89" eingebe muss ich diese Werte ja nun in die oben genannten "interne Grundform" bringen. Und hier hapert es jetzt, wie ich das am Besten mache. Kennt da jemand eine schnelle Möglichkeit, die es ermöglicht beliebig viele Sprachen und Zahlendarstellungen zu unterstützen? Danke. Grüße, Ben. PS: Gettext steht nicht zur Verfügung. PPS: Bei Fragen zur Aufgaben- / Problemstellung einfach nachhaken. |
| | |
| | Nach oben #2 | |
| Dejan Spasic Registriert seit: 05.01.2006 Ort: Düsseldorf
Beiträge: 169
| Zitat:
andere für den Nachkommabereich. In diesen zwei Felder sind dann eben nur Zahlen erlaubt. Oder spricht was dagegen.
__________________ Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt) Geändert von dejan_spasic (15.08.2007 um 13:31 Uhr) | |
| | |
| | Nach oben #3 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 691
|
Eine andere Altenative wäre den String nach den Zeichen '.' und ',' zu durchsuchen, ist nur eines der beiden Zeichen vorhanden, ist das dein Dezimal-Trenner, sind es beide, würde ich den am weitesten rechts vorhandenen als Dezimaltrenner nutzen. Sind beide Zeichen gleichzeitig mehr als ein Mal vorhanden, ist der String fehlerhaft. Um heraus zu finden, wie oft ein '.' und / oder ein ',' vorhanden ist, würde ich folgenden RegEx verwenden: PHP-Code:
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #4 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.517
|
Hallo, ich habe nun mal MrNiceGuy's Vorschlag verwendet, bin aber nicht ganz sicher, wie ich damit umgehen muss. Ich habe nun folgenden Code PHP-Code: Code: 1,345.67
array(2) {
[0]=>
array(2) {
[0]=>
string(1) ","
[1]=>
string(1) "."
}
[1]=>
array(2) {
[0]=>
string(1) ","
[1]=>
string(1) "."
}
}
1,345.67
-----------------------
1345,67
array(2) {
[0]=>
array(1) {
[0]=>
string(1) ","
}
[1]=>
array(1) {
[0]=>
string(1) ","
}
}
1345,67
Zitat:
Danke. | |
| | |
| | Nach oben #5 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 691
|
Ach, sorry, Macht der Gewohnheit: Natürlich gibt preg_match_all () ein mehrdimensionales Array aus. Einfach nur preg_match () ist ein eindimensionales Array. Du kannst es dann wie folgt verarbeiten: PHP-Code:
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #6 | |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
| Zitat:
Ich würde anders vorgehen und einfach via strrev() den String umdrehen und schauen an welcher Stelle das erste Komma/der erste Punkt steht. Ist es die 3. Stelle, ists Dezimaltrenner, ists die 4. ist es Tausendertrenner. Da brauchst du nur strpos() und keine Arraydurchforstung.
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 | |
| | |
| | Nach oben #7 | |
| Johannes Müller Registriert seit: 15.09.2005 Ort: Königreich Flieden
Beiträge: 553
| Zitat:
Sobald beide Zeichen im String enthalten sind, ist klar, dass das letzte der Dezimaltrenner sein muss. Wenn aber nur eins drinnen steht und drei Ziffern dahinter stehen kann es beides sein. Dann geht eigentlich nur über die Browser-Locale raten...
__________________ Weißt Bescheid - Scheiß wie weit | |
| | |
| | Nach oben #8 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Ich vermute jetzt einfach mal total blind dass es sich um Währungsangaben handelt, also maximal 2 Zeichen nach dem Dezimaltrenner stehen. Aber genaues müsste Ben sagen.
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 |
| | |
| | Nach oben #9 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.517
|
@MrNiceGuy: Das Problem bei deinem Code ist doch irgendwie, dass dort nicht berücksichtigt wird, dass ich eine Zahl in einem anderen Format darstellen will/muss. Das return false; muss ja durch die Umformatierung ersetzt werden und hier ist ja dann ein Problem. Ich ersetze je nach "locale" (die Informationen welche Einstellung der User, der die Eingabe macht, hat steht in seinem Profil) die Trennzeichen durch die Trennzeichen, die von PHP verwendet werden (siehe obige Links). Ich kann nun aber nicht wild Kommas durch Punkte und andersherum ersetzen, weil ja so eventuell schon ersetzte Teile erneut verändert werden, so dass es dann zu ungültigen Formaten kommt. Ansatz wäre also: - Ganzzahl bestimmen - Kommastellen bestimmen - die beiden Teile anhand der Standardformatierung zusammen setzen - Zahl zurückliefern Das mit Dezimalstellen muss ich gerade nochmal nachschauen. Es sind keine Währungsangaben. Hat jemand vielleicht noch eine Liste aller möglichen Schreibweisen? Also von Schreibweisen, die in anderen Ländern verwendet werden? Danke schonmal für die bisherige Hilfe |
| | |
| | Nach oben #10 | |
| Dejan Spasic Registriert seit: 05.01.2006 Ort: Düsseldorf
Beiträge: 169
| Zitat:
__________________ Da wir alle in einem Boot sitzen, ist es gut, dass wir nicht alle auf einer Seite stehen... (mir unbekannt) Geändert von dejan_spasic (15.08.2007 um 15:38 Uhr) | |
| | |
| | Nach oben #11 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Vielleicht auch hier? http://framework.zend.com/manual/en/...e.parsing.html
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #12 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.517
|
Mann, da hätt ich ja auch mal von selbst suchen können. Tz .. Zitat:
PS: Ah, da war ja was ... PHP4 Geändert von Ben (15.08.2007 um 16:26 Uhr) | |
| | |
| | Nach oben #13 |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.517
|
Ich hab das nun so: PHP-Code: |
| | |
| | Nach oben #14 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Tztztz, Ben, ed gibt einen Edit-Button. Die Methode sieht ansonsten hübsch aus. Aber wieso machst du deine Defines innerhalb der Methode? Dadurch definierst du die ja jedesmal neu bei mehreren Aufrufen...
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #15 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.517
|
Guter Einwand mit den Konstanten. Die Funktion war auch nur testweise, werde das letztlich wohl in eine Klasse verpacken, so dass das dann sowieso etwas anders aussieht. Habe allerdings noch ein paar Probleme, wenn ich anstatt der PEAR-Klasse, PHP-eigene Dinge verwenden möchte. So führt eine Typkonvertierung ( (float), (int) ) irgendwie intern ein Umformatierung der Zahl durch, wenn ein "locale" gesetzt wurde. PHP-Code: Kann mir einer sagen, warum das so ist? Nachtrag: PHP-Code: Und nun ist es echt mal "crazy" ... also, wenn ich nun eine Ausgabe mit echo von dem typkonvertierten Rückgabewert mache, dann wird ja intern aus dem float ein string, siehe hier Zitat:
Ist das nun fehlerhaft oder ist das so in Ordnung oder wie oder was. Ich weiß gerade nicht, inwiefern da Nebeneffekte auftreten können. Danke. Nachtrag: Also es scheint ganz gut zu klappen. Die Rechnungen laufen und ich erhalte nach ihnen immer noch den gewünschten Typ. Nur bei der Ausgabe wird dann halt nach dem entsprechenden "local" umformatiert. Geändert von Ben (16.08.2007 um 10:37 Uhr) | |
| |