Brauche hilfe bei Überprüfung auf Dezimalbruch... [PHP]
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anlaufstelle
anschein
dezimalzahl
festlegung
formen
formular
funktion
gruss
irgend
komma
manual
mysterium
preisen
prinzip
rckgabe
sicht
stehen
unterschied
variable
wirklichkeit
-
Hey...
ich muss unbedingt wissen wie ich in php überprüfen kann, ob der wert einer variable eine dezimalzahl ist...
im prinzip bräucht ich folgenden code:
if($preis == dezimalzahl) { $preis = $preis."0"; }
kann mir einer von euch da weiter helfen?
danke :D
gruß
chris.samael -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Willst du überprüfen, ob die Zahl eine Kommazahl ist oder ob es eine Ganzzahl ist?
Für Ganzzahlen:
http://www.selfphp.de/funktionsreferenz/variablen_funktionen/is_int.php
Für Kommazahlen:
http://www.selfphp.de/funktionsreferenz/variablen_funktionen/is_float.php
und
http://www.selfphp.de/funktionsreferenz/variablen_funktionen/is_double.php -
leider sagt er mir, wenn ich es überprüfe, das 199 eine Kommazahl ist...
mein code:
if(is_float($price)) { echo "$price ist eine Dezimalzahl"; } elseif(is_int($price)) { echo "$price ist keine Dezimalzahl"; }
ist da irgendwas falsch dran? -
Also bei mir funktioniert das:
$price = 199; if(is_float($price)) { echo $price . ' ist eine Dezimalzahl'; } elseif (is_int($price)) { echo $price . ' ist keine Dezimalzahl'; }
Das gibt
"199 ist keine Dezimalzahl"
zurück. Und so sollte es auch sein. Wie liest du denn die Variable $price ein? -
[..]
ist da irgendwas falsch dran?
Aus syntaktischer Sicht: nein
Es macht allerdings den Anschein, dass PHP den Unterschied zwischen Float und Integer nicht wirklich beachtet. Um mehr zu diesem Mysterium zu erfahren, könnte [1] evtl. eine erste Anlaufstelle sein.
Zum Problem: Überprüfe zuerst, ob die Zahl eine Ganzzahl (= Integer) ist.
[1] http://de.php.net/manual/de/language.types.type-juggling.php
-
compactdisc schrieb:
[..]
ist da irgendwas falsch dran?
Aus syntaktischer Sicht: nein
Es macht allerdings den Anschein, dass PHP den Unterschied zwischen Float und Integer nicht wirklich beachtet. Um mehr zu diesem Mysterium zu erfahren, könnte [1] evtl. eine erste Anlaufstelle sein.
Zum Problem: Überprüfe zuerst, ob die Zahl eine Ganzzahl (= Integer) ist.
[1] http://de.php.net/manual/de/language.types.type-juggling.php
seh ich genau so!
Ich würd es in dem Fall mit Regulären Ausdrücken machen und zwar so:
<?php if(ereg("[0-9]+(.|,)[0-9]+",$_POST['input'])) { echo "Float!\n"; } elseif(ereg("[0-9]+",$_POST['input'])) { echo "Integer!\n"; } else { echo "String!\n"; } ?>
Falls wen intressiert wieso... also ich glaub das ist deshalb weil solche Funktionen immer mit <input>'s und Formularen verwendet werden und die Rückgabe werten aus Formularen, auch wenn nur Zahlen drinnen stehen sind Strings und werden das auch immer bleiben!
mfg -
okay, ich setze mich mal morgen an das problem... liegt wohl scheinbar an der festlegung der variable...
$price wird aus der db ausgelesen und mit $quantity multipliziert (für die dies interessiert, die überprüfung stammt aus einem e-Shop)
gruß und bis morgen
chris.samael -
if(ereg('[0-9]+(.|,)[0-9]+',$_POST['input'])) { echo 'Float!\n'; } elseif(ereg('[0-9]+',$_POST['input'])) { echo 'Integer!\n'; } else { echo 'String!\n'; }
öhm, sry wenn es vllt eine doofe frage ist, aber kann mir einer mal erklären was das script genau macht?
ich verstehs nämlichn nicht... wäre schön zu wissen wie genau das ganze funktioniert...
gruß
chris.samael -
Das Script überprüft, welchen Typ deine Variable ($_POST["input"]) hat:
Wenn sie z.B. die Form
31,523454
hat, dann bezeichnet man den Typ als Float (Kommazahlen)
Wenn sie z.B. die Form
2345
hat, dann ist der Typ Integer (Ganzzahlen)
Wenn sie z.B. die Form
abc334def
hat, dann ist der Typ String (Zeichenkette)
Das ist im Prinzip das, was das Script macht. -
also macht die funktion ereg('[0-9]+(.|,)[0-9]+',$_POST['input']) folgendes:
überprüft ob in der Variabl $_POST['input'] erst Zahlen von 0-9 stehen, dann ein . oder , kommt und danach noch zahlen sind...
oder irre ich mich da?
dh doch, das vor und nach dem ,|. NUR zahlen stehen können, oder?
mfg
chris.samael -
also macht die funktion ereg('[0-9]+(.|,)[0-9]+',$_POST['input']) folgendes:
überprüft ob in der Variabl $_POST['input'] erst Zahlen von 0-9 stehen, dann ein . oder , kommt und danach noch zahlen sind...
oder irre ich mich da?
dh doch, das vor und nach dem ,|. NUR zahlen stehen können, oder?
mfg
chris.samael
Richtig. Und genauso ist ja auch eine Float-Variable aufgebaut. Sie zählt zu den Zahlen-Datentypen:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=61&group=11
Deshalb darf sie auch nichts außer Zahlen und einem Komma bzw. Punkt enthalten. Ansonsten erfüllt sie nicht die Bedingungen und wird folglich nicht als Float eingestuft. -
samael schrieb:
also macht die funktion ereg('[0-9]+(.|,)[0-9]+',$_POST['input']) folgendes:
überprüft ob in der Variabl $_POST['input'] erst Zahlen von 0-9 stehen, dann ein . oder , kommt und danach noch zahlen sind...
oder irre ich mich da?
dh doch, das vor und nach dem ,|. NUR zahlen stehen können, oder?
mfg
chris.samael
Also ähm in Wirklichkeit sind RegEx viel komplizierter aber ja das kommt so hin...
in wirklichkeit ist es so ... [0-9]+ bedeuted zahlen von 0-9 x mal aber ohne null dh. einmal muss es vorkommen... dann (,|.) heißt Substring , oder . und dann wieder [0-9]+ eigentlich einfach aber sehr nutzvoll. -
Warum schreibst du nicht einfach:
if( is_float($zahl) && !is_integer($zahl) ) {
// Gleitkommazahl (Dezimalbruch)
}
else {
// irgend ne andere Art von Zahl
} -
Warum schreibst du nicht einfach:
if( is_float($zahl) && !is_integer($zahl) ) {
// Gleitkommazahl (Dezimalbruch)
}
else {
// irgend ne andere Art von Zahl
}
Sorry das ich dich verbessern muss, aber das geht nicht wenn er den Wert aus der DB nimmt weil dann ist es ein string. ich glaub nicht das das mit den is_ funktionien funktioniert, ich hab das selbst schon öfters probiert bis ich dann auf RegEx umgestiegen bin. -
PHP konvertiert Variablentpyen nach Bedarf. Daher ist es ziemlich egal, woher der Wert kommt, und ob es sich um einen String handelt. Wenn es wirklich Probleme gibt, kann man die Variable auch vorher explizit in eine Gleitkommazahl umwandeln ("casten"):
$var = floatval($var);
oder eben
(float) $var;
Was allerdings eine nachfolgende Abfrage mit is_float() ziemlich unsinnig macht. Aber es geht in dem Fall auch ohne.
Und: Ich bin ausgewiesener PCRE-Fanatiker. Wenn ich eine andere Lösung vorschlage, dann hat das seinen Grund ...
Beitrag geändert: 18.11.2006 22:36:38 von alopex -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage