php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.10.2005, 10:43  
Gast
 
Beiträge: n/a
Standard Formatierung von Strings

Hallo,

folgendes Grundproblem:
--
Ich habe ein Text-Eingabefeld für z.b. Einkaufspreis
Die Eingabe des Users koennte wie folgt aussehen:
- 123
- 123,99

- 1.234
- 1234

- 1.234,99
- 1234,99

soviel zu den moeglichen Eingaben des Users.
Da ich das ganze in MySQL speichere sollte der String in das MySQL-Float format umformatiert werden
(Format: XXXXX.YY)

Ich habe jetzt ne Weile rumexperimentiert, aber eine Loesung die Sauber funktioniert und alle Fälle abdeckt kam dabie nicht raus (mein ansatz ging über COUNT des Strings sowie ein geschachteltes EXPLODE)

So, jetzt die Frage:
--
wie loese ich sowas am besten, elegantesten ?


Gruss
fidel_


ok, ich koennte es so machen, aber der ansatz wirkt auf mich etwas zu kompliziert
PHP-Code:
<?php
// Mein test-string
$text "1.234,99";
// gib Basis aus:
echo $text."
"
;
// Check ok ein Punkt enthalten ist
$check strpos ($text".");
if (
$check == false
{     
    
// Kein Punkt
    // ok wir haben einen String ohne Tausender Punkt
    //
    //Check ob Komma vorhanden
    
$check strpos ($text",");
    if (
$check == false
    {
        
// kein Komma
        
echo $text."
"
;
    }
    else
        {
        
// Komma
           // nun Komma durch Punkt ersetzten
        
$text_array=explode(","$text);
        
$text =$text_array[0].".".$text_array[1];
        echo 
$text."
"
;
        }
    }
    else
    {
        
// Treffer
        // Wir werden den Punkt los
        
$text str_replace("."""$text); 
        echo 
$text."
"
;
        
// ok wir haben einen String ohne Tausender Punkt
        //
        //
        // check ob Komma
        
$check strpos ($text",");
        if (
$check == false
        {
            
// kein Komma
            
echo $text."
"
;        
        }
        else
        {
               
// Komma
            // nun Komma durch Punkt ersetzten
            
$text_array=explode(","$text);
            
$text =$text_array[0].".".$text_array[1];
            echo 
$text."
"
;
        }
}
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.10.2005, 11:21  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
<?php
$zahl 
sprintf('%08.2f'strtr($zahl',''.'));
?>
 
Alt 14.10.2005, 11:23  
Erfahrener Benutzer
 
Registriert seit: 16.03.2005
Beiträge: 421
Niedi
Niedi eine Nachricht über ICQ schicken
Standard

in deinem Code fehlt ne Klammer fidel

@karl: is ja ganz schön wenig im gegensatz zum ersten code lol

mfg niedi
Niedi ist offline  
Alt 14.10.2005, 11:31  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard

Wird aber nicht funktionieren sofern die Zahl im String mit Komma vorliegt. Also z.B. 230,45 gibt mit deiner Funkton 230.00 aus.
Mit Tausender-Beträgen die mit Punkt getrennt sind funktioniert es erst recht nicht.

Ich denke bei dieser Art wäre es am Einfachsten das so zu machen:

$zahl = 4.342,53;

$zahl = str_replace('.','',$zahl); // entfernt Tausender-Punkt
$zahl = str_replace(',','.',$zahl); // Ersetzt Komma durch Punkt für DB

heraus käme wie gewünscht: 4342.53
webbi ist offline  
Alt 14.10.2005, 11:31  
Gast
 
Beiträge: n/a
Standard

@ karl:
sieht schoen kurz aus, aber:
PHP-Code:
<?php
test mal folgendes
:
$zahl "4.567,99";
$zahl sprintf('%08.2f'strtr($zahl',''.'));
echo 
$zahl."
"

?>
und du kriegst: 00004.57 hehe


@Niedi:
was wie wo ?
 
Alt 14.10.2005, 11:37  
Gast
 
Beiträge: n/a
Standard

sorry, hatte den dezimalpunkt übersehen, dann ändere das so:
PHP-Code:
<?php
$zahl 
sprintf('%.2f'strtr(str_replace('.','',$zahl),',','.'));
?>
/edit: gerade wolltest du doch noch das format XXXXX.YY, drum hab ichs mal mit nullen aufgefüllt, jetzt läufts hoffentlich so, wie dus willst, wenn du auch nun keine nachkommastellen willst dann machs so:
PHP-Code:
<?php
$zahl 
strtr(str_replace('.','',$zahl),',','.');
?>
 
Alt 14.10.2005, 12:55  
Gast
 
Beiträge: n/a
Standard

ups, dann hab ich mich falsch ausgedrückt.


funktioniert 1a, und der code ist auch "etwas" überschaubarer hrhr


danke
gruss
fidel_
 
Alt 30.11.2005, 09:37  
Gast
 
Beiträge: n/a
Standard

*wiederauspack*

habe mich aufgrund bekannter Float-Problematiken in MySQL entschieden meine Preise vortan als INT zu speichern.
d.h. die Werte werden in Cent umgerechnet und somit ist kein Feld-Typ Float mehr von Nöten.

nun bin ich wieder am Formatierungspunkt.

Der User kann ja in folgenden Formaten eingaben hinterlassen.
---
9,99
9,9

1.000,99
1.000,9

1000,9
1000,99
--
Sollten die Varianten sein.

Habe inzwischen diverse Befehle zur Zeichenerkennung & Ersetzung (str_replace, explode, number_format, ereg...) kennengelernt
aber die Frage stellt sich, wie gehe ich das am besten an, ohne grossen unnötigen Code zu produzieren.

Ziel:
--
- Eingabe aufnehmen
- Punkt und Komma entfernen
(geht einfach mit str_replace, deckt aber die anzahl der mögl. Nachkommastellen nicht ab)
-> finalen Cent Betrag erhalten (ggf. x 100 aber nur in bestimmten Fällen bei keiner Nachkommastelle)

Ideen ? Ansätze ?

Gruss
fidel
 
Alt 30.11.2005, 09:51  
Gast
 
Beiträge: n/a
Standard

ist doch irgendwie schwachsinnig:

Willst du darüber spekulieren,
was mit einem INPUT im Format "1.2,34.5.6,78,,9"
wohl gemeint sein kann?
Und diesen dann irgendwie 'passend' machen?
Und dann auch noch glauben,
daß das, was du daraus machst, richtig ist,
auch das ist, was der 'Eingeber' gemeint hat???

~dilemma~

Irgendwie versteh ich soleche Fragen wohl nicht.
 
Alt 30.11.2005, 09:57  
Gast
 
Beiträge: n/a
Standard

oehm willst du einfach sagen:

USER du darfst nur SO und EXAKT SO Eingaben erfassen ?

Oder was schwebt dir Alternativ vor ?
Du magst die Frage nicht verstehen, ich nicht deinen nichtgenannten Alternativ-weg
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML Formatierung beibehalten HaraDej PHP Tipps 2007 6 15.02.2007 16:12
TAB innerhlab eines Strings. GELight PHP Tipps 2006 8 10.07.2006 21:16
erste und letzte stelle eines strings entfernen MrCavity PHP Tipps 2006 6 23.04.2006 19:14
[Erledigt] Spreadsheet Excel Writer: &amp;amp;quot;Multiple&amp;amp;quot; Formatierung PHP-Fortgeschrittene 1 26.01.2006 11:06
doppelte Werte / Strings einer Spalte nur einmal ausgeben... Datenbanken 2 29.07.2005 12:10
mysql daten ohne html formatierung ausgeben wizzardxx PHP Tipps 2005 2 28.03.2005 00:56
alle Positionen eines Strings innerhalb eines Strings finden PHP Tipps 2005 8 23.02.2005 20:21
teil eines strings ausschneiden janni PHP Tipps 2007 6 03.01.2005 14:21
text zwischen zwei strings verändern auchegal PHP Tipps 2004-2 1 30.12.2004 12:37
strings sortieren aircrash PHP Tipps 2004-2 5 23.12.2004 16:57
Ist String Teil eines anderen Strings? PHP Tipps 2004-2 2 23.12.2004 16:46
Strings Teilweise ausgeben PHP Tipps 2004-2 8 09.12.2004 13:18
metrische länge eines strings Sclot PHP-Fortgeschrittene 3 08.12.2004 13:54
[Erledigt] Strings saeubern PHP Tipps 2004 2 12.10.2004 15:52
Vorkommen eines Strings zählen.. PHP Tipps 2004 3 26.09.2004 01:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php printf tausenderpunkt, printf tausenderpunkt, php sprintf tausender punkt, php sprintf tausender, sprintf tausenderpunkt, php sprintf tausenderpunkt, php sprintf tausenderpunkte, sprintf tausender punkt, sprintf tausenderpunkte, php string umformatieren, printf tausenderpunkte, sprintf tausender, string umformatieren php, php printf dezimalpunkt, tausenderpunkt dezimalkomma php, tausender als komma mit sprintf php, tausenderpunkt printf php, php string formatieren, php text formatieren komma punkt, php tausenderpunkt entfernen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:06 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.