<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.9" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Kommentare zu: Ich hasse PHP</title>
	<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/</link>
	<description>We love to HOST you. :-)</description>
	<pubDate>Mon, 15 Jun 2026 13:35:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.9</generator>

	<item>
		<title>Von: Klaus Keppler</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-28387</link>
		<pubDate>Tue, 12 Oct 2010 12:25:52 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-28387</guid>
					<description>Die Links zu dem Thema sind wirklich interessant.

Problematisch ist aber, dass man bei schwach typisierten Sprachen wie PHP und Perl nunmal keinen Einfluss darauf hat, in welchem internen Datentyp die Zahlen abgelegt werden.

Und wenn dann noch die Darstellung intern irgendwie herumrundet (obwohl man das explizit nicht wÃ¼nscht), wird's echt blÃ¶d. :-)</description>
		<content:encoded><![CDATA[<p>Die Links zu dem Thema sind wirklich interessant.</p>
<p>Problematisch ist aber, dass man bei schwach typisierten Sprachen wie PHP und Perl nunmal keinen Einfluss darauf hat, in welchem internen Datentyp die Zahlen abgelegt werden.</p>
<p>Und wenn dann noch die Darstellung intern irgendwie herumrundet (obwohl man das explizit nicht wÃ¼nscht), wird&#8217;s echt blÃ¶d. <img src='https://archiv.rackblogger.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: niemand</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-28284</link>
		<pubDate>Wed, 29 Sep 2010 13:08:21 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-28284</guid>
					<description>Bin hier per google drauf gestoÃŸen..

Dieses Problem hier ist lediglich ein Darstellungsproblem (und der Fehler ist wohl eher, dass PHP die Zahlen bei der Darstellung rundet, sogar bei var_dump - das ist zugegeben verwirrend).

Aber mal ehrlich: man benutzt fÃ¼r Preisberechnungen keine Floating Point Zahlen! Niemals. Dummerweise wird das trotzdem viel zu oft gemacht... und da redet man und erklÃ¤rt man, und am Ende machen sie den Fehler doch immer wieder - ging mir gerade bei einem Projekt so :(

Es hilft nur lesen, lernen, verstehen:...

http://www.c2.com/cgi/wiki?FloatingPointCurrency
http://docs.sun.com/source/806-3568/ncg_goldberg.html</description>
		<content:encoded><![CDATA[<p>Bin hier per google drauf gestoÃŸen..</p>
<p>Dieses Problem hier ist lediglich ein Darstellungsproblem (und der Fehler ist wohl eher, dass PHP die Zahlen bei der Darstellung rundet, sogar bei var_dump - das ist zugegeben verwirrend).</p>
<p>Aber mal ehrlich: man benutzt fÃ¼r Preisberechnungen keine Floating Point Zahlen! Niemals. Dummerweise wird das trotzdem viel zu oft gemacht&#8230; und da redet man und erklÃ¤rt man, und am Ende machen sie den Fehler doch immer wieder - ging mir gerade bei einem Projekt so <img src='https://archiv.rackblogger.de/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Es hilft nur lesen, lernen, verstehen:&#8230;</p>
<p><a href="http://www.c2.com/cgi/wiki?FloatingPointCurrency" rel="nofollow">http://www.c2.com/cgi/wiki?FloatingPointCurrency</a><br />
<a href="http://docs.sun.com/source/806-3568/ncg_goldberg.html" rel="nofollow">http://docs.sun.com/source/806-3568/ncg_goldberg.html</a>
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: dog</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15976</link>
		<pubDate>Thu, 09 Apr 2009 23:05:59 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15976</guid>
					<description>Wenn man das ganze aber nun mit BCMath und 10 Nachkommastellen rechnet passiert folgendes: 

&lt;blockquote&gt;
Input: 34.04148
Schritt 1: 680.82960
Schritt 2: 681
Schritt 3: 34.0500000000
Schritt 4: 3405.0000000000
string(15) "3405.0000000000"
Schritt 5: 3405
&lt;/blockquote&gt;</description>
		<content:encoded><![CDATA[<p>Wenn man das ganze aber nun mit BCMath und 10 Nachkommastellen rechnet passiert folgendes: </p>
<blockquote><p>
Input: 34.04148<br />
Schritt 1: 680.82960<br />
Schritt 2: 681<br />
Schritt 3: 34.0500000000<br />
Schritt 4: 3405.0000000000<br />
string(15) &#8220;3405.0000000000&#8243;<br />
Schritt 5: 3405
</p></blockquote>
]]></content:encoded>
				</item>
	<item>
		<title>Von: Klaus Keppler</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15963</link>
		<pubDate>Thu, 09 Apr 2009 13:02:57 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15963</guid>
					<description>Es handelt sich nur um Beispielcode...
Im "echten" Code findet auch die ganze Berechnung in nur einer Zeile statt.</description>
		<content:encoded><![CDATA[<p>Es handelt sich nur um Beispielcode&#8230;<br />
Im &#8220;echten&#8221; Code findet auch die ganze Berechnung in nur einer Zeile statt.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: Patrick</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15962</link>
		<pubDate>Thu, 09 Apr 2009 12:53:50 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15962</guid>
					<description>$betrag = â€˜34.04148â€²;

Wieso packst du die Zahl eigentlich in einen String?</description>
		<content:encoded><![CDATA[<p>$betrag = â€˜34.04148â€²;</p>
<p>Wieso packst du die Zahl eigentlich in einen String?
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: Klaus Keppler</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15959</link>
		<pubDate>Thu, 09 Apr 2009 12:23:37 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15959</guid>
					<description>Letztendlich verwirrt die Tatsache, dass sich "intval" nicht an der Ausgabegenauigkeit orientiert, sondern lediglich ein Synonym fÃ¼r "floor" ist (und sich somit auf die intern verwendete Genauigkeit bezieht).

Rein arithmetisch verhÃ¤lt sich o.g. Beispiel in Perl oder C natÃ¼rlich genauso, und Schritt 5 wÃ¼rde (bei floor() statt intval()) auch "3404" ausgeben. Nur wÃ¼rde ich das da auch so erwarten.

http://de.wikipedia.org/wiki/Principle_Of_Least_Surprise</description>
		<content:encoded><![CDATA[<p>Letztendlich verwirrt die Tatsache, dass sich &#8220;intval&#8221; nicht an der Ausgabegenauigkeit orientiert, sondern lediglich ein Synonym fÃ¼r &#8220;floor&#8221; ist (und sich somit auf die intern verwendete Genauigkeit bezieht).</p>
<p>Rein arithmetisch verhÃ¤lt sich o.g. Beispiel in Perl oder C natÃ¼rlich genauso, und Schritt 5 wÃ¼rde (bei floor() statt intval()) auch &#8220;3404&#8243; ausgeben. Nur wÃ¼rde ich das da auch so erwarten.</p>
<p><a href="http://de.wikipedia.org/wiki/Principle_Of_Least_Surprise" rel="nofollow">http://de.wikipedia.org/wiki/Principle_Of_Least_Surprise</a>
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: Master of Bachelor</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15953</link>
		<pubDate>Thu, 09 Apr 2009 11:22:33 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15953</guid>
					<description>wenn PHP den internen Wert anzeigt, dann ist es auch verkehrt, da das ja nicht der Wert ist, dem die Variable zugeordnet wurde.


PHP zeigt genau den Wert an, den die Variable haben sollte. Durch die interne Ungenauigkeit kommt es beim Abschneiden der Nachkommastellen dann leider zu dem Ungenauigkeitsfehler.

WÃ¤re aber natÃ¼rlich schÃ¶ner, wenn PHP bei einem intval intern von alleine ein floor macht.

Zu der Problematik siehe auch PHP Dokumentation: http://de2.php.net/manual/de/language.types.float.php#warn.float-precision</description>
		<content:encoded><![CDATA[<p>wenn PHP den internen Wert anzeigt, dann ist es auch verkehrt, da das ja nicht der Wert ist, dem die Variable zugeordnet wurde.</p>
<p>PHP zeigt genau den Wert an, den die Variable haben sollte. Durch die interne Ungenauigkeit kommt es beim Abschneiden der Nachkommastellen dann leider zu dem Ungenauigkeitsfehler.</p>
<p>WÃ¤re aber natÃ¼rlich schÃ¶ner, wenn PHP bei einem intval intern von alleine ein floor macht.</p>
<p>Zu der Problematik siehe auch PHP Dokumentation: <a href="http://de2.php.net/manual/de/language.types.float.php#warn.float-precision" rel="nofollow">http://de2.php.net/manual/de/language.types.float.php#warn.float-precision</a>
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: Klaus Keppler</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15948</link>
		<pubDate>Thu, 09 Apr 2009 10:22:20 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15948</guid>
					<description>Sorry, ich schÃ¤tze mir meinten das gleiche. Auf was ich aber hinaus will: wenn eine Variable intern den Wert "34.049999999" hat, will ich spÃ¤testens mit var_dump() oder sprintf("0.20f") genau diesen Wert sehen (was PHP aber nicht macht).

Ich habe gerade kein JDK griffbereit, behaupte aber mal, dass Java beim PrintfFormat().sprintf() die Zahl tatsÃ¤chlich "vollstÃ¤ndig" ausgeben wÃ¼rde - unabhÃ¤ngig von der internen Rechenungenauigkeit.</description>
		<content:encoded><![CDATA[<p>Sorry, ich schÃ¤tze mir meinten das gleiche. Auf was ich aber hinaus will: wenn eine Variable intern den Wert &#8220;34.049999999&#8243; hat, will ich spÃ¤testens mit var_dump() oder sprintf(&#8221;0.20f&#8221;) genau diesen Wert sehen (was PHP aber nicht macht).</p>
<p>Ich habe gerade kein JDK griffbereit, behaupte aber mal, dass Java beim PrintfFormat().sprintf() die Zahl tatsÃ¤chlich &#8220;vollstÃ¤ndig&#8221; ausgeben wÃ¼rde - unabhÃ¤ngig von der internen Rechenungenauigkeit.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: Master of Bachelor</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15947</link>
		<pubDate>Thu, 09 Apr 2009 10:09:34 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15947</guid>
					<description>Und damit hast du exakt gesagt, was PHP macht! PHP hat das selbe Problem wie Java bei der 1-1-Float-Problematik!

Gebe nach jeder Zeile per var_dump die Variable aus, Ergebnis:

Input: $betrag\nstring(8) "34.04148"
Schritt 1: 680.8296
float(680.8296)
Schritt 2: 681
float(681)
Schritt 3: 34.05
float(34.05)
Schritt 4: 3405
float(3405)
Schritt 5: 3404
int(3404)

Was man sieht ist das selbe Float-Ungenauigkeits-Problem! Das Runden Ã¤ndert den Variablentyp (natÃ¼rlich) nicht auf int, sondern er bleibt bei float. In dem Moment wo du es zu int castest (und intval macht nichts anderes) fÃ¤llt die Ungenauigkeit ins Gewicht.

Bei meinem 1-1-Java-Beispiel konnte man die Variablen auch ausgeben und Java behauptete auch da, dass beide Variablen den Wert 1 haben und eben nicht 0,9999...99 bzw. 1,0000...01!

Daher immer beim casten von float auf int: intval(round($var))!

Das selbe gilt fÃ¼r jede andere Programmiersprache!</description>
		<content:encoded><![CDATA[<p>Und damit hast du exakt gesagt, was PHP macht! PHP hat das selbe Problem wie Java bei der 1-1-Float-Problematik!</p>
<p>Gebe nach jeder Zeile per var_dump die Variable aus, Ergebnis:</p>
<p>Input: $betrag\nstring(8) &#8220;34.04148&#8243;<br />
Schritt 1: 680.8296<br />
float(680.8296)<br />
Schritt 2: 681<br />
float(681)<br />
Schritt 3: 34.05<br />
float(34.05)<br />
Schritt 4: 3405<br />
float(3405)<br />
Schritt 5: 3404<br />
int(3404)</p>
<p>Was man sieht ist das selbe Float-Ungenauigkeits-Problem! Das Runden Ã¤ndert den Variablentyp (natÃ¼rlich) nicht auf int, sondern er bleibt bei float. In dem Moment wo du es zu int castest (und intval macht nichts anderes) fÃ¤llt die Ungenauigkeit ins Gewicht.</p>
<p>Bei meinem 1-1-Java-Beispiel konnte man die Variablen auch ausgeben und Java behauptete auch da, dass beide Variablen den Wert 1 haben und eben nicht 0,9999&#8230;99 bzw. 1,0000&#8230;01!</p>
<p>Daher immer beim casten von float auf int: intval(round($var))!</p>
<p>Das selbe gilt fÃ¼r jede andere Programmiersprache!
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: Klaus Keppler</title>
		<link>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15946</link>
		<pubDate>Thu, 09 Apr 2009 09:41:42 +0000</pubDate>
		<guid>https://archiv.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15946</guid>
					<description>Nein, das mit Java ist ein anderes Problem (Ungenauigkeit bei Float-Berechnungen) - das konnte einem sogar mit alten Pentium-CPUs passieren (egal mit welcher Programmiersprache).

PHP macht den Fehler, dass es eigenstÃ¤ndig die Zahlen mit einer anderen Genauigkeit ausgibt, als es fÃ¼r interne Berechnungen verwendet.</description>
		<content:encoded><![CDATA[<p>Nein, das mit Java ist ein anderes Problem (Ungenauigkeit bei Float-Berechnungen) - das konnte einem sogar mit alten Pentium-CPUs passieren (egal mit welcher Programmiersprache).</p>
<p>PHP macht den Fehler, dass es eigenstÃ¤ndig die Zahlen mit einer anderen Genauigkeit ausgibt, als es fÃ¼r interne Berechnungen verwendet.
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
