Bruzzler: PHP Float - wird nicht berechnet?

Hi,

ich würde gern aus einer Gesamtsumme und den Versandkosten die Summe berechnen, Leider wird die Gesamtsumme nicht als Zahlenformat übergeben, deswegen hab ich das versucht:

  
<?php echo $shippingcost+(float)substr($order_total_display,13);?>  

Es werden aber nur die Versandkosten ausgegeben. Hat jemand ne Idee?

Danke und viele Grüße
Bruzzler

  1. Hi there,

    <?php echo $shippingcost+(float)substr($order_total_display,13);?>

    
    >   
    > Es werden aber nur die Versandkosten ausgegeben. Hat jemand ne Idee?  
      
      
    selbst wenn float eine Funktion wäre, wäre Deine Notation syntaktisch falsch. Im Prinzip werden Zahlenwerte implizit zu Zahlen, wenn Du einen numerischen Operator auf Strings anwendest. Am einfachsten ist es immer noch, strings, die Zahlenwerte darstellen, mit 1 zu multiplizieren, wenn Du sie als Zahlen benötigst...  
      
    
    
    1. Moin!

      Hi there,

      <?php echo $shippingcost+(float)substr($order_total_display,13);?>

      
      > >   
      > > Es werden aber nur die Versandkosten ausgegeben. Hat jemand ne Idee?  
      >   
      >   
      > selbst wenn float eine Funktion wäre, wäre Deine Notation syntaktisch falsch.  
        
      Wieso das? Weil der Typecasting-Operator "(float)" nicht auf das Funktionsergebnis von substr() angewendet werden kann? Würde es dann nicht schlicht zu einem PHP-Fehler kommen, über den Bruzzler sich hätte beschweren können?  
        
      Angeblich werden ja die Versandkosten ausgegeben. Das kann ja nur passieren, wenn der zweite Summand zero wäre. Und das wiederum passiert vermutlich nur, wenn das Ergebnis der Funktion substr() etwas ist, was als float gecastet genau diese 0 ergibt. Also alles, was nicht eine von 0 verschiedene Zahldarstellung ist.  
        
      Das Debugging sollte also genau beim Funktionsergebnis von substr() ansetzen: Kommt da raus, was man erwartet?  
        
      Die möglichen Rundungsfehler von Fließkommaberechnungen kriegen wir dann später... :)  
        
       - Sven Rautenberg
      
      1. Ohje, das klingt so, als wäre es eigentlich falsch, den string so in ein zahlenformat zu bringen.
        Das komische ist, auf einem anderen Server klappt das ganze...sehr sehr seltsam...
        Gibts noch ne andere Möglichkeit ausser mit 1 zu multiplizieren?

        1. Tach,

          Ohje, das klingt so, als wäre es eigentlich falsch, den string so in ein zahlenformat zu bringen.

          ne das paßt schon, allerdings scheint substr($order_total_display,13) nicht das zu ergeben, was du erwartest; was kommt denn raus, wenn du nur das ausgibst?

          mfg
          Woodfighter

          1. ne das paßt schon, allerdings scheint substr($order_total_display,13) nicht das zu ergeben, was du erwartest; was kommt denn raus, wenn du nur das ausgibst?

            Dann kommt 0 raus.
            Wenn ich <?php echo $order_total_display ?> kommt € 83,85 raus...also richtig... ich checks net :(

            1. Hi there,

              ne das paßt schon, allerdings scheint substr($order_total_display,13) nicht das zu ergeben, was du erwartest; was kommt denn raus, wenn du nur das ausgibst?

              Wenn ich <?php echo $order_total_display ?> kommt € 83,85 raus...also richtig... ich checks net :(

              Naja, wenn $order_total_display "€ 83,85" ist, was ist dann wohl der Wert nach der 13. Stelle von $order_total_display?

            2. Hallo,

              Wenn ich <?php echo $order_total_display ?> kommt € 83,85 raus...also richtig...

              nö, alles andere als richtig. Der String beginnt mit einem €-Zeichen. Was erwartest du, wenn PHP versucht, ein €-Zeichen in einen Zahlenwert zu konvertieren? Und was erwartest du, wenn du erst beim 13. Zeichen damit beginnst, also jenseits vom String-Ende?
              Abgesehen davon: Wenn du das €-Zeichen überspringst, folgen zwei durch Komma getrennte Zahlenwerte, nämlich die 83 und die 85. Das ergibt also auch keinen Sinn.

              Ciao,
               Martin

              --
              Ungeschehene Ereignisse können einen katastrophalen Mangel an Folgen nach sich ziehen.
                (Unbekannter Politiker)
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              1. Ahh,
                mist, so wird etwas ausgegeben:

                  
                <?php echo $shippingcost+(float)substr($order_total_display,6);?>  
                
                

                das €  wird dann in &euro; umgewandelt, deswegen ab dem 6. zeichen.

                Jetzt hab ich nur noch das Problem, dass nur ine glatte zahl dargestellt wird und offensichtlich gerundet wird ... wie kann ich denn die original zahl bekommen?

                Danke und Grüße

                1. Hallo,

                  <?php echo $shippingcost+(float)substr($order_total_display,6);?>
                  das €  wird dann in &euro; umgewandelt, deswegen ab dem 6. zeichen.

                  das ist dann noch ein weiteres Problem: warum steht "&euro;" anstatt "€" im String?
                  Und warum nicht stattdessen "EUR"?

                  Jetzt hab ich nur noch das Problem, dass nur ine glatte zahl dargestellt wird und offensichtlich gerundet wird

                  Ich sagte doch schon: Das Komma trennt zwei Zahlen voneinander.

                  Ciao,
                   Martin

                  --
                  Eine Nonne kommt in den Himmel. An der Pforte fragt Petrus: "Wer bist du?" - "Ich bin die Braut Jesu." Petrus stutzt einen Moment, ruft dann nach hinten: "He Freunde, habt ihr schon gehört? Der Juniorchef will heiraten!"
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. es steht € im string, wenn ich kein zeichen abschneide, sobald ich ein zeichen abschneide wirds in &euro; umgewandelt. habs mir per echo ausgeben lassen und rumprobiert...

                    hmm mist. gibts ne andere möglichkeit??

                2. Hallo,

                  Jetzt hab ich nur noch das Problem, dass nur ine glatte zahl dargestellt wird und offensichtlich gerundet wird ...

                  nein, nicht gerundet, wie Martin schon schrieb.

                  wie kann ich denn die original zahl bekommen?

                  Welches Zeichen trennt laut Doku in PHP bei Zahlliteralen Vor- und Nachkommastellen. Tipp: es ist nicht das Komma.

                  Ersetze daher vor der Umwandlung in eine Zahl das Komma durch das richtige Trennzeichen. Alternativ käme für Dein Problem auch ein regulärer Ausdruck in Betracht. Dann hast Du zwei Probleme ...

                  Freundliche Grüße

                  Vinzenz

        2. Hi,

          Ohje, das klingt so, als wäre es eigentlich falsch, den string so in ein zahlenformat zu bringen.

          Natürlich ist es das.
          Wieso liegt dir etwas, womit du rechnen willst, nicht auch als Zahl vor? Korrigiere *diesen* Fehler.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. Hi there,

        Wieso das? Weil der Typecasting-Operator "(float)" nicht auf das Funktionsergebnis von substr() angewendet werden kann?

        Was es nicht alles gibt. Wieder etwas gelernt. Auch wenn ich das als komplett nutzloses Wissen sofort wieder zu vergessen suche.;)

        Würde es dann nicht schlicht zu einem PHP-Fehler kommen, über den Bruzzler sich hätte beschweren können?

        Ja, was weiss ich, was er für ein Error-Reporting er eingestellt hat. Aber es stimmt natürlich, in dem Fall würde er nicht einmal die Versandkosten 'rausbekommen.

        Das Debugging sollte also genau beim Funktionsergebnis von substr() ansetzen: Kommt da raus, was man erwartet?

        ja, das ist zwingend...