Dezimalzahl 0.00 verstecken, bzw. als 0 in Drupal behandeln
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 02.09.2013 - 10:39 Uhr in
Hallo Zusammen,
Ich suche jetzt schon ein paar Stunden nach einer Lösung, finde aber keine. Ich denke das das Problem eigentlich ganz simpel sein sollte, bekomme es aber nicht auf die Reihe.
Zum Problem:
Ich habe ein Webformular, das nach dem submit ein xml erstellt, und dieses in ein cms schiebt. Da in dem Formular einige Abhängigkeiten bestehen (so z.B. manche Felder nur unter bestimmten Umständen angezeigt werden), möchte ich das auch nur werte ins xml wandern, wenn sie größer als 0, bzw. vorhanden sind. Das löse ich so:
if (!empty($data['wohnwirtschaftlich_flaeche'])){
$bemerkung_plain .= "Wie groß ist die wohnwirtschaftlich genutze Gesamtfläche?\n" . $data['wohnwirtschaftlich_flaeche'] . "\n\n";}
Da mysql ja bei einem Wert von z.B. 12,98 ins Wankel kommt, nehme ich noch eine Wandlung von komma zu Punkt vor:
str_replace(array('.', ','), array('', '.'), $form_state['values']['step_2']['wohnwirtschaftlich']['wohnwirtschaftlich_flaeche']),
Das Feld selber, ist folgendermaßen definiert:
'wohnwirtschaftlich_flaeche' => array(
'type' => 'numeric',
'size' => 'normal',
'precision' => 14,
'scale' => 2,
'default' => 0,
'unsigned' => TRUE,
'not null' => TRUE,
Nun zum eigentlichen Problem: Ins xml werden brav nur alle Werte geschrieben die vorhanden/größer als 0 sind, nur leider auch 0.00.
Wie kann ich dafür sorgen, das die 0.00 werte als 0 gewertet werden?
Vielen Dank schonmal für lesen :)
Lieben Gruß,
Bogoth
- Anmelden oder Registrieren um Kommentare zu schreiben
str_replace() gibt einen
am 02.09.2013 - 11:07 Uhr
str_replace() gibt einen string zurück keine number...
http://www.php.net/manual/en/language.types.type-juggling.php#language.t...
zum Umwandeln von Zahlen benutzt man number_format()
Gruß
Christian
(int)
am 02.09.2013 - 11:17 Uhr
Du musst pruefen ob der Wert groesser 0 ist.
Wenn nicht erzwingst Du (int).
is_int($wohnwirtschaftlich_flaeche['default']) ? $wohnwirtschaftlich_flaeche['default'] : (int) $wohnwirtschaftlich_flaeche['default'];
Edit:
Mist, verdammt.
!is_int($wohnwirtschaftlich_flaeche['default']) ? $wohnwirtschaftlich_flaeche['default'] : (int) $wohnwirtschaftlich_flaeche['default'];
http://www.php.net/manual/de/function.is-int.php -> 1. Beispiel
@quiptime es geht hier nicht
am 02.09.2013 - 11:51 Uhr
@quiptime
es geht hier nicht um integers, nach deinem Vorschlag wäre 0.12 nicht größer als 0.
wenn dann schon (float) ...
Das sollte funktionieren.
am 02.09.2013 - 13:25 Uhr
<?php
$foo['a'] = 0.0;
//$foo['a'] = 0.12;
//$foo['a'] = 1.12;
if ($foo['a'] == 0) {
$foo['a'] = is_float($foo['a']) ? (int) $foo['a'] : $foo['a'];
}
//dsm($foo);
?>
Das sollte funktionieren.
?? wieso wandelst Du wieder
am 02.09.2013 - 13:27 Uhr
??
wieso wandelst Du wieder in eine integer um? '(int) $foo['a']'
Das ist die
am 02.09.2013 - 13:37 Uhr
Das ist die Frage.
Wie kann ich dafür sorgen, das die 0.00 werte als 0 gewertet werden?
da sorgst Du nun auch gleich
am 02.09.2013 - 13:39 Uhr
da sorgst Du nun auch gleich dafür, dass 0.12 auch als 0 gewertet wird, naja...
Wird es nicht.
am 02.09.2013 - 13:46 Uhr
dass 0.12 auch als 0 gewertet wird
Wird es nicht.
Schmeiss doch meinen letzten Code mal in Devel's PHP Execute und probiere die dsm() Ausgaben der drei Varianten von $foo['a'].
bei mir kommt 0 raus und
am 02.09.2013 - 14:31 Uhr
bei mir kommt 0 raus und nicht 0.12 - wahrscheinlich hast Du deine if-Condition nicht angepasst, oder so...
Ich habe aber echt keine Lust dazu, darüber zu "diskutieren" ob eine integer Nachkommazahlen hat oder nicht, und ob php mit dem Casting (int) eine integer erzeugt oder nicht.
Sorry, klinke mich hier jetzt aus...
Danke Euch für die schnellen
am 02.09.2013 - 14:56 Uhr
Danke Euch für die schnellen Antworten :)
Ich habe es jetzt folgendermaßen gelöst:
str_replace(array('.', ','), array('', '.'), $form_state['values']['step_2']['wohnwirtschaftlich']['wohnwirtschaftlich_flaeche']) ist so geblieben, ich habe nur
if (!empty($data['wohnwirtschaftlich_flaeche'])){
$bemerkung_plain .= "Wie groß ist die wohnwirtschaftlich genutze Gesamtfläche?\n" . $data['wohnwirtschaftlich_flaeche'] . "\n\n";}
in
if (!empty($data['wohnwirtschaftlich_flaeche']) && $data['wohnwirtschaftlich_flaeche'] > 0 ){
$bemerkung_plain .= "Wie groß ist die wohnwirtschaftlich genutze Gesamtfläche?\n" . $data['wohnwirtschaftlich_flaeche'] . "\n\n";}
geändert.
Ist glaube ich nicht sonderlich elegant, aber funktioniert :)
Danke Euch nochmals....
Viele Grüße,
Bogoth
P.S.: Ich habe auch mit number_format rumgespielt, aber habs irgendwie nicht ganz hinbekommen. Aus 5000,95 wurden 5000.00