<?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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/</link>
	<description>We love to HOST you. :-)</description>
	<pubDate>Fri, 10 Feb 2012 18:53:33 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.9</generator>

	<item>
		<title>Von: Klaus Keppler</title>
		<link>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-28387</link>
		<pubDate>Tue, 12 Oct 2010 12:25:52 +0000</pubDate>
		<guid>http://www.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='http://www.rackblogger.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />
</p>
]]></content:encoded>
				</item>
	<item>
		<title>Von: niemand</title>
		<link>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-28284</link>
		<pubDate>Wed, 29 Sep 2010 13:08:21 +0000</pubDate>
		<guid>http://www.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='http://www.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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15976</link>
		<pubDate>Thu, 09 Apr 2009 23:05:59 +0000</pubDate>
		<guid>http://www.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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15963</link>
		<pubDate>Thu, 09 Apr 2009 13:02:57 +0000</pubDate>
		<guid>http://www.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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15962</link>
		<pubDate>Thu, 09 Apr 2009 12:53:50 +0000</pubDate>
		<guid>http://www.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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15959</link>
		<pubDate>Thu, 09 Apr 2009 12:23:37 +0000</pubDate>
		<guid>http://www.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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15953</link>
		<pubDate>Thu, 09 Apr 2009 11:22:33 +0000</pubDate>
		<guid>http://www.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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15948</link>
		<pubDate>Thu, 09 Apr 2009 10:22:20 +0000</pubDate>
		<guid>http://www.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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15947</link>
		<pubDate>Thu, 09 Apr 2009 10:09:34 +0000</pubDate>
		<guid>http://www.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>http://www.rackblogger.de/2009/04/09/ich-hasse-php/#comment-15946</link>
		<pubDate>Thu, 09 Apr 2009 09:41:42 +0000</pubDate>
		<guid>http://www.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>

