dobardan: preis formatierung bei php

ich habe Problem mit dem Preis Format. Nachkomma Stelle wird  nicht berücksichtigt.
Z.B.  29.90 * 2 = 59,8 und nicht 58. Ich verstehe es nicht, wieso berechnet er 58?

  
if(!isset($endpreis_ohne_versandkosten)) { $endpreis_ohne_versandkosten = 0; }  
 $gespreis = floatval($menge * $stkpreis);  
 $gespreis = number_format($gespreis , 2, ',', '');  
        $endpreis_ohne_versandkosten = floatval($endpreis_ohne_versandkosten) + $gespreis;  
 $endpreis_ohne_versandkosten= number_format($endpreis_ohne_versandkosten,2, '.', '');  

Danke

  1. Lieber dobardan,

    schade, dass Du Dich in Deinem alten Thread nicht mehr gemeldet hast, um für Antworten Danke zu sagen.

    Du suchst sprintf.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hi Felix,

      Entschuldigung. Ganz herzlichen Dank für Deine ausführliche Antwort wegen des alten Threads.

      Aber hier verstehe ich nicht warum es nicht mit float oval und number_format nicht funktioniert. sprintf versuche ich jetzt.

      Gruß

      dobardan

      1. ich habe es versuch mit sprintf aber irgendwie geht es nicht.
        ich habe hier gesamtpreis als

          
        $gespreis = printf($gespreis ,'%f');  
        
        

        das funktioniert nicht.

        zweitens ich habe mit number_format eine einfache Beispiel versucht - und es funktioniert.

          
        <?php  
        $a=39.9;  
        $a=floatval($a);  
        $a=number_format($a, 2, '.', '' );  
        $b=2;  
        $c=floatval($a*$b);  
        $c=number_format($c, 2, '.', '' );  
        echo "$a"."<br>\n";  
        echo "$b"."<br>\n";  
        echo "$c";  
        ?>  
        
        

        Danke

        1. Hallo

          Ich schreib meinen Senf mal als Kommentare zum Code.

          <?php
          $a=39.9;

          // $a ist schon ein float. Der nächste Schritt ist unnoetig.

          $a=floatval($a);

          // Jetzt machst du, [pref:t=175994;m=1157240@title=wie Martin schon sagte], aus dem float-Wert einen String ...

          $a=number_format($a, 2, '.', '' );
          $b=2;

          // ... und bei der Multiplikation einer Zahl mit einem String,
          // der nicht einem float-Wert entspricht (Komma anstatt Punkt),
          // wird der Wert als ein Integer benutzt (39*2).

          $c=floatval($a*$b);

          // Der Rest ist für die Sache unerheblich.

          ?>

            
          Tschö, Auge  
          
          -- 
          Die deutschen Interessen werden am Liechtenstein verteidigt.  
            
          [Veranstaltungsdatenbank Vdb 0.2](http://termindbase.auge8472.de/)
          
  2. Hallo,

    ich habe Problem mit dem Preis Format. Nachkomma Stelle wird  nicht berücksichtigt. Z.B.  29.90 * 2 = 59,8 und nicht 58. Ich verstehe es nicht, wieso berechnet er 58?

    $gespreis = number_format($gespreis , 2, ',', '');
    $endpreis_ohne_versandkosten = floatval($endpreis_ohne_versandkosten) + $gespreis;

    hier wandelst du $gespreis erst in das "kaputte" Format mit einem Komma als Dezimaltrennzeichen um, dann addierst du diesen Wert wieder. Dabei werden natürlich die Nachkommastellen ignoriert; sie sind ja mit einem Komma vom eigentlichen Wert abgetrennt.
    Hast du womöglich in $endpreis_ohne_versandkosten auch schon ein Komma anstelle eines ordentlichen Dezimalpunkts? Dann wäre es klar, dass die Nachkommastellen nicht mitgerechnet werden.

    Mach bitte solche Umwandlungen, bei denen das Dezimaltrennzeichen verstümmelt wird, immer erst als allerletzten Schritt, bevor du die Daten ausgibst - niemals schon im Lauf der Rechnung!

    Ciao,
     Martin

    --
    F: Was ist schneller: Das Licht oder der Schall?
    A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.