Datentyp für Eurich?
Gabi F.
- datenbank
Hi,
welchen Datentyp benutzt man am besten für Euro-Beträge?
Datenbank: mySQL
Daten: Euro + Cent
z.B. 10000,23
Grüßle
Hallo,
ich würde Decimal(12,2) oder Decimal(12,3) verwenden. Was hast Du denn vor? Die Nachkommastellen können ja bis zu vier durchaus wichtig sein.
Auf keinen Fall einen Double-Type. Wenn Du dann mal einen Verglich machen musst, und es ist aus Versehen eine Nachkommastelle auf Position 19 nicht auf 0, findest Du den Wert nie wieder. Buchhaltungsdaten müssen recherchierbar sein, wie Texte.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
ich würde Decimal(12,2) oder Decimal(12,3) verwenden. Was hast Du denn vor? Die Nachkommastellen können ja bis zu vier durchaus wichtig sein.
Hi Thomas,
DANKE
ich habe 'Decimal(12,2)' genommen. Reicht völlig für meine Genauigkeit (Preisangabe).
Jetzt habe ich aber ein Punkt in der DB als Trennzeichen (Euro.Cent)
Soll ich die Funktion 'preg_replace()' zum tauschen des Trennzeichen nehmen oder gibt es da einen andern Trick?
Möchte Euro,Cent!
Grüßle
Moin!
Jetzt habe ich aber ein Punkt in der DB als Trennzeichen (Euro.Cent)
Soll ich die Funktion 'preg_replace()' zum tauschen des Trennzeichen nehmen oder gibt es da einen andern Trick?
Wenn du den Wert aus der Datenbank ausliest, behandle ihn als Zahlenwert. Die Ausgabe kannst du dann mit printf() oder sprintf() regeln.
preg_replace() ist außerdem ein ziemlich großes Geschütz, um nur einen Punkt in ein Komma zu tauschen. str_replace() scheint mir besser geeignet.
http://www.php.net/manual/en/function.str-replace.php
- Sven Rautenberg
Hossa,
ich habe gelesen, dass 'ereg_replace()' besser ist.
Habe jetzt:
<? echo ereg_replace("%.%", "%,%" ,$row["angebote_preis"]) ?>
Oder könnte man das Tauschen auch auf der Datenbankseite machen?
'SELECT angebote_preis FROM angebote'
Grüßle
Hossa,
ich habe gelesen, dass 'ereg_replace()' besser ist.
Habe jetzt:
<? echo ereg_replace("%.%", "%,%" ,$row["angebote_preis"]) ?>Oder könnte man das Tauschen auch auf der Datenbankseite machen?
'SELECT angebote_preis FROM angebote'Grüßle
<? echo ereg_replace("%.%", "%,%" ,$row["angebote_preis"]) ?>
hat nicht funktioniert :(
<? echo strtr($row["angebote_preis"], ".", ",") ?>
jetzt geht es :)
Hallo nochmal,
habe mal einen kleinen Versuch für Dich angestellt. Man muss also aufpassen, ob die Nummer schon deutsch formatiert ist, oder nicht...
<?PHP #### number2string.php ####
$number = 78654123.56;
$number_str = number_format($number,2, ',', '.');
echo $number_str;
echo "<hr>";
$number = "235890.456";
$number_str = number_format($number,2, ',', '.');
echo $number_str;
echo "<hr>";
$number_str2 = number_format($number_str,2, ',', '.');
echo $number_str2;
echo "<hr>";
?>
Liebe Grüße aus http://www.braunschweig.de
Tom
DANKE Tom,
kannst du bitte noch paar Worte dazu schreiben, was da geht.......
Guten [Tageszeit],
Hallo nochmal,
habe mal einen kleinen Versuch für Dich angestellt. Man muss also aufpassen, ob die Nummer schon deutsch formatiert ist, oder nicht...
<?PHP #### number2string.php ####
$number = 78654123.56; // nummer liegt im decimal-Format der DB vor
$number_str = number_format($number,2, ',', '.');
// nummer, dezimalstellen, Fraktaltrenner, 1000erSeparator
echo $number_str; // und ausgabe
echo "<hr>"; // horizontale Trennlinie
$number = "235890.456"; // Nummer liegt als "amerikanischer String" vor
$number_str = number_format($number,2, ',', '.'); //noch ein Versuch
echo $number_str; // und ausgabe -> siehe da, gerundet...
// das waren gelich zwei Erkenntnisse. String geht und runden auch
echo "<hr>"; // na, das ist wieder die Linie
// So nun die Feuerprobe: //Nummer als deutschen String übergeben
$number_str2 = number_format($number_str,2, ',', '.');
// obwohl die Formatierung für einen deutschen String eingegeben wurde, hat die dumme Funktion das nicht erkannt, dass auch das Argument schon deutsch formatiert war... Na, muss man eben dran denken. Immer als amerikanische Zahl oder String übergeben!
echo $number_str2; // sieh da, da hat er sich aber was feines ausgedacht
echo "<hr>"; // und das ist wieder eine Linie *ggg*
?>
Liebe Grüße aus http://www.braunschweig.de
Tom
Liebe Grüße aus http://www.braunschweig.de
Tom
Guten [Tageszeit],
Hallo nochmal,
habe mal einen kleinen Versuch für Dich angestellt. Man muss also aufpassen, ob die Nummer schon deutsch formatiert ist, oder nicht...
<?PHP #### number2string.php ####
$number = 78654123.56; // nummer liegt im decimal-Format der DB vor
$number_str = number_format($number,2, ',', '.');
// nummer, dezimalstellen, Fraktaltrenner, 1000erSeparator
echo $number_str; // und ausgabe
echo "<hr>"; // horizontale Trennlinie
$number = "235890.456"; // Nummer liegt als "amerikanischer String" vor
$number_str = number_format($number,2, ',', '.'); //noch ein Versuch
echo $number_str; // und ausgabe -> siehe da, gerundet...
// das waren gelich zwei Erkenntnisse. String geht und runden auch
echo "<hr>"; // na, das ist wieder die Linie
// So nun die Feuerprobe: //Nummer als deutschen String übergeben
$number_str2 = number_format($number_str,2, ',', '.');
// obwohl die Formatierung für einen deutschen String eingegeben wurde, hat die dumme Funktion das nicht erkannt, dass auch das Argument schon deutsch formatiert war... Na, muss man eben dran denken. Immer als amerikanische Zahl oder String übergeben!
echo $number_str2; // sieh da, da hat er sich aber was feines ausgedacht
echo "<hr>"; // und das ist wieder eine Linie *ggg*
?>
Liebe Grüße aus http://www.braunschweig.de
Tom
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Gabi,
da gibt es noch eine Funktion, die speziell dafür gemacht ist:
Ich sehe aber gerade, dass die angeblich ein float erwartet. Allerdings ist float in php wohl das gleiche, wie decimal in mysql ???
http://www.php.net/manual/en/function.number-format.php
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi!
ich habe gelesen, dass 'ereg_replace()' besser ist.
woher hast du das? im Manual steht:
"Anmerkung: Die Funktion preg_replace(), die eine zu Perl kompatible Syntax regulärer Ausdrücke verwendet, ist häufig die schnellere Alternative zu ereg_replace()."
(siehe: http://www.php3.de/manual/de/function.ereg-replace.php)
Grüße
Andreas
Moin!
welchen Datentyp benutzt man am besten für Euro-Beträge?
Datenbank: mySQL
Daten: Euro + Cent
z.B. 10000,23
Wahlweise DECIMAL bzw. NUMERIC (siehe http://www.mysql.com/doc/en/Numeric_types.html), oder du speicherst die Werte als Cent in einem INT-Typ (TINYINT, MEDIUMINT, INT, BIGINT).
- Sven Rautenberg
Hi Gabi,
welchen Datentyp benutzt man am besten für Euro-Beträge?
integer (für cents), und bei der Visualisierung mit DIV 100 und MOD 100 arbeiten.
Alles, was auch nur vage nach Nachkommastellen aussieht, solltest Du in diesem Feld grundsätzlich meiden.
Mathematische Rundungsverfahren und gesetzliche Vorschriften sind in diesem Falle nicht dadurch unter einen Hut zu bekommen, daß irgend einer Datenbank irgend eine Konvertierungsroutine verwendet - das mußt Du explizit machen. Denn _Du_ bist für die Folgen ggf. juristisch verantwortlich - nicht das RDBMS.
Viele Grüße
Michael