zoro17
Goto Top

PHP Zahlenkonvertierung mit float

Hallo zusammen,
ich habe MySQL- Datenbank-Tabellen mit Feldern vom Typ decimal und char. Lese die Inhalte per
PHP aus. Soweit kein Problem.
Die Applikation, die die Weiterverarbeitung übernimmt, verlangt zwingend ein Komma (kein
Punkt) für die Zahlenwerte. Da ich auch Texte habe, kann ich nicht einfach alle Punkte in Kommata
per PHP umwandeln.
Eine Fallunterscheidung ist bei der Anzahl von Tabellen und Feldern leider unmöglich.
Deshalb versuche ich, den Wert per PHP mit (float) umzuwandeln. Geht das gut, tausche ich
den Punkt in Komma aus. Geht die Umwandlung schief, ist es ein Text, bei dem es nichts
umzuwandeln gibt.
Nun habe ich in den decimal Feldern auch eine 0 drin, die als 0.000000 gespeichert wurde.
Die Umwandlung (float)0.000000 verhält sich leider wie ein String, d.h. ich erkenne die Zahl hier
nicht.
Kennt jemand hier eine Lösung des Problems? Bietet sich für die Typenbestimmung etwas
anderes für float an?

Leider kan ich aus Performancegründen keine umfangreiche Fallunterscheidung machen, d.h.
mit max. 2 Bedingungen sollte ich wissen, ob ich es mit einem String oder mit einer Zahl zu tun
habe.
Danke im Voraus.
Gruss

Content-ID: 79709

Url: https://administrator.de/contentid/79709

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

Guenni
Guenni 01.02.2008 um 22:36:41 Uhr
Goto Top
@zoro17

Hi,

is_double(variable) gibt am Bildschirm eine 1 aus(true), wenn variable
eine Zahl ist.

doubleval(variable) wandelt eine Variable vom Typ String, die eine
Dezimalzahl darstellt, in einen Typ Dezimalzahl um.

$var="0.12"; wäre eine Variable vom Typ String.

$var=doubleval($var);

echo is_double($var); gibt auch hier true aus.

Gruß
Günni
zoro17
zoro17 01.02.2008 um 23:31:48 Uhr
Goto Top
Hallo Günni,
vielen Dank für Deine Antwort. Werde es ausprobieren und Rückmeldung geben.
Gruss
zoro17
zoro17 02.02.2008 um 12:46:10 Uhr
Goto Top
Hallo Günni,
da ich noch PHP Neuling bin (bisher nur ASP), kam ich dank Deiner Hilfe zu den Funktionen, die
mir helfen. Ich glaube, is_numeric ist das, was ich brauche oder?
Hatte damit Erfolg.
Gruss
Guenni
Guenni 02.02.2008 um 19:04:14 Uhr
Goto Top
@zoro17

Hi,

Ich glaube, is_numeric ist das, was ich brauche oder?

$var="0.15"; // <-- Stringvariable

if(is_numeric($var)){
echo "JA";
}

Da bei diesem Beispiel ein JA ausgegeben wird, könnte es
auch das sein, was du brauchst.

Da ich aber letztendlich deine Tabellendefinition nicht kenne und
auch nicht deinen Abfrageterm, kann ich hier nur mutmaßen.

Probier's einfach aus, wenn es nicht geht, poste mal mehr Info.

Ach ja, was ich noch sagen(schreiben) wollte:

Eine Null im Format 0.000000 kann ich in meiner Datenbank nicht
ablegen. Da steht immer nur 0. Vielleicht kannst du mir sagen, wie du das
gemacht hast face-smile

Gruß
Günni
zoro17
zoro17 02.02.2008 um 21:22:40 Uhr
Goto Top
Hallo Günni,
zum Hintergrund meiner Frage:
Meine Applikation ist in MS Excel bzw. in Staroffice Calc integriert.
Diese Applikation setzt http Befehle (i.a SQL Befehle) ab.
Das Backoffice (Webdatenbank mit ASP bzw. PHP) antwortet mit html.
Bei einer Select-Anweisung kommt eine große html-Tabelle zurück,
die die Office Pakete clientseitig in ihre Zellen laden und weiterverarbeiten können.
Ist eine reelle Zahl in der Webdatenbank (z.b. 12.34), dann schmeißen
die Office Pakete das Komma weg. Kommt jedoch 12,34 an, klappts an.

Das serverseitige PHP Programm, das den Select entgegennimmt, behandelt
jedes Datenbankfeld gleich, egal ob string, int, float, datum...
Seine Aufgabe ist nur das Auflisten in Tabellenform.

Zu Deiner Frage: ich erweitere gerade serverseitig von SQL Server/
Windows zu MySql/Windows bzw. Linux. Um den SQL Server zu kopieren, habe ich
ein Programm geschrieben, das per SQL die MySQL Datenbank
aufbaut und füllt. Das Feld ist in MySQLwie im SQL Server als dec 15,6 definiert
und wird per SQL mit dem Wert 0.000000 gefüllt. So kommt die Zahl in MySQL.

Gruss