Berechnungen zweistellig
am 20.12.2006 08:40:08 von guenter nowack
Hallo,
aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
einfliessen.
Das Ergebnis sollen immer zweistellige Zahlen sein.
Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
immer wieder in einzelfällen zu Rundungsfehlern kommt.
Wie weist man an, dass in PHP zweistellig gerechnet wird?
danke
guenter
fup: de.comp.lang.php.datenbanken
Re: Berechnungen zweistellig
am 20.12.2006 09:00:52 von Helmut Chang
guenter nowack schrieb:
> Wie weist man an, dass in PHP zweistellig gerechnet wird?
Schnelle Lösung ohne viel Nachdenken: Nimm die Basiswerte, multipliziere
mit 100, runde auf die nächste Ganzzahl. Damit rechnest du dann und
dividierst das Regebnis am Schluss wieder durch 100.
gruss, heli
Re: Berechnungen zweistellig
am 20.12.2006 09:12:52 von Heiko Richler
Hallo Guenter,
> aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
> einfliessen.
> Das Ergebnis sollen immer zweistellige Zahlen sein.
Du meinst mit zwei Dezimalstellen, oder? Benutzt Du in der Datenbank
Gleitkommazahlen (float, double ...) oder Festkommazahlen (decimal)?
siehe: http://dev.mysql.com/doc/refman/5.0/en/precision-math-exampl es.html
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
> immer wieder in einzelfällen zu Rundungsfehlern kommt.
Wo und wie stellst Du das denn ein? Am Datentyp oder für die Ausgabe?
> Wie weist man an, dass in PHP zweistellig gerechnet wird?
Suchst Du die PHP-Funktionen round($x, 2), ceil($x, 2) oder floor($x, 2)
zum arithmetisch, auf- oder abrunden? Ansonsten kenne ich keinen Weg das
PHP allgemein anzuweisen.
Eventuell brauchst Du von allem etwas?
Heiko
--
http://portal.richler.de/ Namensportal zu Richler
http://www.richler.de/ Heiko Richler: Computer - Know How!
http://www.richler.info/ private Homepage
Re: Berechnungen zweistellig
am 20.12.2006 09:40:43 von thorny
guenter nowack schrieb:
> aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
> einfliessen.
> Das Ergebnis sollen immer zweistellige Zahlen sein.
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
> immer wieder in einzelfällen zu Rundungsfehlern kommt.
> Wie weist man an, dass in PHP zweistellig gerechnet wird?
Mit Hilfe des BCMath-Modules, welches Rechnen mit beliebiger Genauigkeit
unterstützt, sollte das möglich sein.
Siehe auch:
http://de2.php.net/manual/de/ref.bc.php
Gruß,
Torsten
Re: Berechnungen zweistellig
am 20.12.2006 10:03:29 von Ulf Kadner
guenter nowack schrieb:
> aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
> einfliessen.
> Das Ergebnis sollen immer zweistellige Zahlen sein.
Welches Ergebnis? Das des Auslesens oder das der Berechnung?
Wenns um die Berechnung geht:
3.23 * 8.88 ergibt erstmal obs Dir gefällt oder nicht 4 Nachkommastellen.
Um das gleich bei der Berechnung zu beeinflußen sei Dir BcMath ans Herz
gelegt.
http://www.php.net/manual/en/ref.bc.php
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet,
Was meinst Du mit intern? Was meinst Du mit einstellen? Haste in der
php.ini rumgeschraubt und dort die Genauigkeit (precision) verändert?
> fup: de.comp.lang.php.datenbanken
Was soll das den werden? Wenn sich Deine Frage auf Datenbanken bezieht,
dann frage in der NG, die dafür bestimmt ist.
MfG, Ulf
Re: Berechnungen zweistellig
am 20.12.2006 10:10:53 von zirias
Hallo guenter,
* guenter nowack :
> Das Ergebnis sollen immer zweistellige Zahlen sein. Das Problem ist
> aber, dass die Zweistelligkeit zwar eingestellt werden kann, intern
> wird aber mit den weiteren Nachkommastellen gerechnet, sodass es immer
> wieder in einzelfällen zu Rundungsfehlern kommt.
Festkommazahlen benutzen (also Ganzzahlen und das Komma einfach irgendwo
"definieren"). Wobei ich deiner Logik nicht folgen kann: Rundungsfehler
entstehen, wenn man Stellen abschneidet, nicht wenn man möglichst viele
berücksichtigt.
> fup: de.comp.lang.php.datenbanken
Was hat das denn mit Datenbanken zu tun?
GrüÃe, Felix
--
Felix M. Palmen (Zirias) \ -PGP- /"\ ASCII Ribbon
web: http://zirias.ath.cx/ \ http://zirias.ath.cx/pub.txt \ / Campaign
my open source projects: \ FP ED9B 62D0 BE39 32F9 2488 X Against HTML In
http://zirias.ath.cx/?pg=pro \ 5D0C 8177 9D80 5ECF F683 / \ Mail And News
Re: Berechnungen zweistellig
am 20.12.2006 10:59:55 von sk
guenter nowack schrieb:
> Das Ergebnis sollen immer zweistellige Zahlen sein.
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
Ich gehe mal davon aus das du eine 4/5 Rundung brauchst z.B für Cent.
Innerhalb MySql geht das mit ROUND(wert,2) in PHP mit
round($wert,2)
siehe auch: http://de.php.net/manual/de/function.round.php
Jörg
Re: Berechnungen zweistellig
am 20.12.2006 11:21:59 von Claus Reibenstein
guenter nowack schrieb:
> aus einer MySQL Datenbank werden Zahlen ausgelesen, die in eine Berechnung
> einfliessen.
Wo die Zahlen herkommen, dürfte für Dein Problem ziemlich egal sein.
Jedenfalls sehe ich außer der Herkunft Deiner Daten nichts in Deinem
Posting, was irgendetwas mit Datenbanken zu tun hat.
> Das Ergebnis sollen immer zweistellige Zahlen sein.
Also zwischen 0 und 99 liegen?
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
Wo denn? Und wie?
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
> immer wieder in einzelfällen zu Rundungsfehlern kommt.
Aha. Es geht also nicht um zweistellige Zahlen, sondern um Dezimalzahlen
mit einer Genauigkeit von zwei Nachkommastellen.
> Wie weist man an, dass in PHP zweistellig gerechnet wird?
Gar nicht. Solche Fälle vermeidet man, indem man nur mit ganzen Zahlen
rechnet, also z.B. nicht mit uro, sondern mit Cent.
Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /
Re: Berechnungen zweistellig
am 20.12.2006 12:02:56 von Irmgard Schwenteck
Hallo
Felix M. Palmen schrieb:
> Festkommazahlen benutzen (also Ganzzahlen und das Komma einfach irgendwo
> "definieren"). Wobei ich deiner Logik nicht folgen kann: Rundungsfehler
> entstehen, wenn man Stellen abschneidet, nicht wenn man möglichst viele
> berücksichtigt.
kommt drauf an:
Zahl gerundet
1,55 1,6
1,45 1,5
----- -----
3,00 3,0
sieht halt falsch aus.
GruÃ
Irmgard
Re: Berechnungen zweistellig
am 20.12.2006 12:16:36 von do.not.REMOVETHAT
guenter nowack schrieb:
> Das Ergebnis sollen immer zweistellige Zahlen sein.
> Das Problem ist aber, dass die Zweistelligkeit zwar eingestellt werden kann,
> intern wird aber mit den weiteren Nachkommastellen gerechnet, sodass es
> immer wieder in einzelfällen zu Rundungsfehlern kommt.
Das Problem sind nicht die Rundungsfehler in PHP, sondern die in der
Anzeige. Du musst versuchen, ungenauer zu rechnen, indem Du mit jeden
Zwischenergebnis, dass Du gerundet ausgibt auch gerundet weiterrechnest.
Falsch:
9,999 -> runden -> 9,99 -> Anzeigen
-> mal 10 -> 99,99 -> Anzeigen 99,99
Richtig:
9,99 -> runden -> 9,99 -> Anzeigen
-> mal 10 -> 99,90 -> Anzeigen 99,90
Grüße, Matthias
--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.