Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: round() - 2 unterschiedliche Ergebnisse
AUTOR BEITRAG
phoeniks

RANG Godlike

#1 - 08.04 11:24

PHP-code:
<?
$gesamtpreis
=0.99;
$gesbetragj=round((($gesamtpreis/100)*50),2);

$gesbetrags=($gesamtpreis/100)*50;

echo 
"J:".$gesbetragj;
echo 
"<br>";
echo 
"S:".$gesbetrags;
echo 
"<br>";
echo 
"<br>";
echo 
"<br>";
echo 
"round:".round(0.495,2);
?>


Das Verhalten der round() Funktion gibt mir Rätsel auf.
Im Beispiel kommt oben für $gesbetragj 0.49 raus.
Als Kontrolle dient $gesbetrags wo 0.495 rauskommt.
Nimmt man nun (letzte Zeile) diese Zahl 0.495 und wendet round an erhält man 0.5

Wieso erhält man ein anderes Ergebnis wenn man die Zahl berechnet als wenn man die Zahl fest vorgibt?
Ynusis

RANG Deckschrubber

#2 - 08.04 12:50

Meine Vermutung wäre, dass (($gesamtpreis/100)*50 intern != 0.495 ist, sondern noch n paar mehr Stellen hat.
HoPi` *Chuck Norris weiss, warum da Stroh liegt*

RANG God of Clanintern

#3 - 10.04 10:21

Versuch mal den hier:

PHP-code:
<?php 
function toFixed($number$round=2)
{
   
    
$tempd $number*pow(10,$round);
    
$tempd1 round($tempd);
    
$number $tempd1/pow(10,$round);
    return 
$number;
    
}

echo 
round(5.555,2); // gibt 5.55
echo toFixed(5.555,2);  //gibt 5.56 ?>

Sonst mal die Kommentare auf http://de2.php.net/round durchforsten.
phoeniks

RANG Godlike

#4 - 11.04 19:42

Hab was anderes gefunden - ich will eigentlich alles auf den nächsten Cent aufrunden.

PHP-code:
<?php function fCeil($val,$pressision=2){
     
$p pow(10,$pressision);
    
$val $val*$p;
    
$val ceil($val);
  return 
$val /$p;
?>
*al!ve* - Vorbereitung aufs Urlaubssemester

RANG Master of Clanintern

#5 - 11.04 20:36

Ja, dann ist ceiling dein Freund. Das gegensätzliche wäre floor. Beides sollte aus der Mathematik bekannt sein. Dass es ein programmiersprachliches Pendant gibt, das auch noch genauso heißt (bzw eine Abkürzung davon ist) ist nur naheliegend.