Rechenfehler? – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Rechenfehler? Mon, 16 Mar 09 18:23:39 Z https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347293#m1347293 https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347293#m1347293 <p>Hi!</p> <p>Wo liegt hier der Fehler?</p> <pre><code class="block language-php"><span class="token variable">$amount</span> <span class="token operator">=</span> <span class="token number">1990</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'amount'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$amount</span><span class="token operator">/</span><span class="token number">100</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">intval</span><span class="token punctuation">(</span><span class="token variable">$amount</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token function">intval</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token variable">$result</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'amount'</span><span class="token punctuation">]</span> <span class="token operator">*</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// hier will ich rein </span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string double-quoted-string">"fehler"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>gibt "fehler" aus, warum?</p> <p>lg<br> Johannes</p> Rechenfehler? Mon, 16 Mar 09 18:30:46 Z https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347297#m1347297 https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347297#m1347297 <p>Aloha 'oe,</p> <blockquote> <pre><code class="block language-php"></code></pre> </blockquote> <p>$amount = 1990;</p> <blockquote> <p>$result ['amount'] = $amount/100;<br> if (intval($amount) == intval(($result ['amount'] * 100))) {<br>   // hier will ich rein<br> }<br> else {<br>   echo "fehler";<br> }</p> </blockquote> <pre><code class="block"> > > gibt "fehler" aus, warum? Prüfe doch mal, was in $result ['amount'] steht. Gruß, Volker -- „I conclude that there are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies." - Tony Hoare </code></pre> Rechenfehler? Mon, 16 Mar 09 18:34:50 Z https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347296#m1347296 https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347296#m1347296 <p>Hi,</p> <blockquote> <pre><code class="block language-php"></code></pre> </blockquote> <p>$amount = 1990;</p> <blockquote> <p>$result ['amount'] = $amount/100;<br> if (intval($amount) == intval(($result ['amount'] * 100))) {<br>   // hier will ich rein<br> }<br> else {<br>   echo "fehler";<br> }</p> </blockquote> <pre><code class="block"> > > gibt "fehler" aus, warum? Wegen der (hier schon vielfach diskutierten) Rechenungenauigkeit, die sich beim Rechnen mit Dezimalbrüchen im Binärsystem nun mal zwangsläufig einstellt. Wenn du bspw. folgende Kontrollausgaben gemacht hättest, var\_dump($result['amount']); var\_dump(intval($amount)); var\_dump(intval($result['amount'] \* 100)); dann hättest du als Ergebnis das hier bekommen: float(19.9) int(1990) int(1989) Wenn du bei letzterem das intval weglässt, var\_dump($result['amount'] \* 100); - dann bekommst du wiederum float(1990) Das macht sich hier negativ bemerkbar, weil du eine Float-Zahl in einen Integer "konvertierst" - der binärbedingte "Fehler" der Float-Zahl ist so gering, dass sie in dezimaler Form als 1990 ausgegeben wird; beim Umwandeln in Int hingegen schlägt er derart zu. Wenn du höhere Genauigkeit brauchst, dann schau dir bspw. die [BCMath](http://www.php.net/manual/en/book.bc.php)-Funktionen an. MfG ChrisB -- „This is the author's opinion, not necessarily that of Starbucks.“ </code></pre> Rechenfehler? Mon, 16 Mar 09 18:35:08 Z https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347295#m1347295 https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347295#m1347295 <p>@@JohannesMaier:</p> <blockquote> <p>gibt "fehler" aus, warum?</p> </blockquote> <p>Weil du die FAQ nicht – wie dir geheißen – gelesen hast.</p> <p>Live long and prosper,<br> Gunnar</p> <div class="signature">-- <br> Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau) </div> Doppelposting / Sockenpuppen Mon, 16 Mar 09 18:43:50 Z https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347294#m1347294 https://forum.selfhtml.org/self/2009/mar/16/rechenfehler/1347294#m1347294 <p>Hallo,</p> <blockquote> <p>Wo liegt hier der Fehler?</p> </blockquote> <p>1. Im Verfassen von <a href="https://forum.selfhtml.org/?t=184595&m=1223979" rel="noopener noreferrer">Doppelpostings</a><br> 2. Im raschen <a href="https://forum.selfhtml.org/?t=184595&m=1223979" rel="noopener noreferrer">Wechseln des Nicks</a>.</p> <p>Ciao,<br>  Martin</p> <div class="signature">-- <br> Arzt:    Gegen Ihr Übergewicht hilft wohl nur noch Gymnastik.<br> Patient: Sie meinen, Kniebeugen und so?<br> Arzt:    Nein, Kopfschütteln. Immer dann, wenn Ihnen jemand was zu essen anbietet. </div>