SELFPHP: Version 5.7.9 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche


Deine Leidenschaft ist die Unterwasserfoto-grafie?


Dann ist Qozido genau das Richtige für Dich!

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler ist da!

www.qozido.de

 

CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 


Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.11.2007, 12:35:46
Webbing Webbing ist offline
Anfänger
 
Registriert seit: Dec 2003
Beiträge: 17
Webbing befindet sich auf einem aufstrebenden Ast
intval 'berechnet' falsch !!!

Hallo,

leider weiß ich nicht mehr weiter.

Bei der 'Umwandlung' einer Zahl in einen Integer ist manchmal das Ergebnis um '1' zu klein.

PHP-Code:
for($i 511.84$i 511.88$i += .01) {
    echo(
$i.' - '.($i*100).' - '.(doubleval($i)*100).' - '.(intval(doubleval($i)*100)).'<br>');

Das ergibt die Ausgabe:

511.84 - 51184 - 51184 - 51184
511.85 - 51185 - 51185 - 51185
511.86 - 51186 - 51186 - 51185
511.87 - 51187 - 51187 - 51186
511.88 - 51188 - 51188 - 51187


Warum inkrementiert intval ab 51186 ?

Die Berechnung 'intval(doubleval($i)*100)' benutze ich in einem Web und habe hier zum Testen nur mal eine Schleifen darum gesetzt.

Entferne ich doubleval, so ist der Fehler immer noch drin.
Entferne ich intval, so werden die Zahlen korrekt angezeigt.


Viele Grüße
Frank
Mit Zitat antworten
  #2  
Alt 29.11.2007, 13:02:33
feuervogel feuervogel ist offline
Moderator
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.550
feuervogel befindet sich auf einem aufstrebenden Ast
AW: intval 'berechnet' falsch !!!

der fehler passiert schon vorher:
PHP-Code:
<?php
for($i 400.84$i 400.88$i $i 0.01) {
    echo 
$i;
    echo 
"<br>";
}  

?> 
<br>
<?php
for($i 4$i 8$i $i 1) {
    echo 
$i;
    echo 
"<br>";
}  

?>
eigentlich dürfte die 400.88 gar nicht mfehr da stehen (im unteren beispiel ists korrekt).

warum ist mir allerdings ein rätsel...
Mit Zitat antworten
  #3  
Alt 29.11.2007, 13:17:59
Webbing Webbing ist offline
Anfänger
 
Registriert seit: Dec 2003
Beiträge: 17
Webbing befindet sich auf einem aufstrebenden Ast
AW: intval 'berechnet' falsch !!!

Zitat:
Zitat von feuervogel Beitrag anzeigen
eigentlich dürfte die 400.88 gar nicht mfehr da stehen (im unteren beispiel ists korrekt).
Stimmt, das ist mir noch gar nicht aufgefallen.

Allerding hat es mit meinem Problem nichts zu tun.
Wie du an den Zahlenkolonnen siehst, wird erst nach dem intval die Zahl geändert.

Trotzdem vielen Dank für deinen Beitrag. Scheinbar hat PHP an mehreren Stellen Probleme mit Kommazahlen.

Vielleicht kann uns ja jemand sagen, wo das eventuell bereits dokumentiert ist und ob man diese Fehler irgendwie umgehen kann.

Viele Grüße
Frank
Mit Zitat antworten
  #4  
Alt 29.11.2007, 13:19:39
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 45
Beiträge: 1.016
defabricator befindet sich auf einem aufstrebenden Ast
AW: intval 'berechnet' falsch !!!

http://de2.php.net/manual/de/language.types.float.php
Zitat:
Warnung
Fließkomma Präzision
__________________
Wat der Bauer nich kennt, dit frisster nich.
Mit Zitat antworten
  #5  
Alt 29.11.2007, 13:35:39
Webbing Webbing ist offline
Anfänger
 
Registriert seit: Dec 2003
Beiträge: 17
Webbing befindet sich auf einem aufstrebenden Ast
AW: intval 'berechnet' falsch !!!

Danke defabricator,

scheinbar sollte ich einfach das intval entfernen und darauf vertrauen, dass das doubleval richtig funktioniert. Dann stimmt nämlich auch das Endergebnis.

Viele Grüße
Frank
Mit Zitat antworten
  #6  
Alt 29.11.2007, 14:23:21
feuervogel feuervogel ist offline
Moderator
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.550
feuervogel befindet sich auf einem aufstrebenden Ast
AW: intval 'berechnet' falsch !!!

Zitat:
Das gründet sich auf die Tatsache, dass es unmöglich ist, manche Dezimal-Zahlen durch eine endliche Anzahl an Nachkomma-Stellen darzustellen. Dem Wert 1/3 entspricht z.B. der interne Wert von 0.3333333. . ..
Manche Dezimalzahlen lassen sich also nicht durch eine endliche Zahlenfolge darstellen und daher verrechnet sich PHP bei

floor((0.1 + 0.7) * 10)

Wie passt das nun aber zusammen? In dem fehlerhaften Beispiel kommt keine Zahl vor, bei der es bei der Dezimaldarstellung Probleme geben sollte, oder???
Mit Zitat antworten
  #7  
Alt 29.11.2007, 19:06:38
Benutzerbild von meikel
meikel meikel ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 65
Beiträge: 3.887
meikel befindet sich auf einem aufstrebenden Ast
AW: intval 'berechnet' falsch !!!

Zitat:
Zitat von feuervogel Beitrag anzeigen
In dem fehlerhaften Beispiel kommt keine Zahl vor, bei der es bei der Dezimaldarstellung Probleme geben sollte, oder???
PHP rechnet aber nicht mit Dezimalzahlen. Bei der Umrechnung dezimaler Zahlen ins Float Format können unendliche binäre Brüche entstehen...
Mit Zitat antworten
  #8  
Alt 29.11.2007, 19:13:36
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 45
Beiträge: 1.016
defabricator befindet sich auf einem aufstrebenden Ast
AW: intval 'berechnet' falsch !!!

Naja, die deutsche Übersetzung ist mal wieder etwas unpräzise.
Zitat:
This is related to the fact that it is impossible to exactly express some fractions in decimal notation with a finite number of digits. For instance, 1/3 in decimal form becomes 0.3333333. . ..
Das Problem liegt in der Binärdarstellung der Fießkommazahl.
Weder 511.85 noch 511.86 lassen sich glatt als binäre Fließkommazahl darstellen.
__________________
Wat der Bauer nich kennt, dit frisster nich.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Tabelle wird falsch angezeigt Slaughter HTML, CSS und JavaScript Help! 6 10.12.2003 09:08:11
COUNT oder was ist heir falsch pda PHP Grundlagen 9 18.11.2003 15:00:43
Was mach ich falsch? HILFE!!!!! BeneBaur PHP für Fortgeschrittene und Experten 3 24.07.2003 11:22:58
was ist hier falsch (passwortabfrage) ? Willy PHP Grundlagen 3 18.02.2003 18:46:16
was ist hier drin falsch?? Silencer PHP für Fortgeschrittene und Experten 11 19.09.2002 16:11:35


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:26:05 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.


© 2001-2014 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt