thecreep: typecast? string zu integer?

Hi,

hab grad ein kleines Problem, finde aber keine Lösung. Folgender Code vorweg fürs Verständnis:

	  var id = document.getElementById("viewdata").innerHTML;  
	  id= id.substr(5);  
	  id=(id+dx);  
	  alert(id+" dx:"+dx);

Nach dem substr-Aufruf steht in id nur noch eine Zahl, dx ist auch eine Zahl.
Das addieren läuft allerdings falsch, da id immernoch als string behandelt wird bekomme ich
leider z.B. "15-1 dx:-1" oder z.B. "151 dx:1" raus.

Wie kann ich bewirken, dass id als Zahl behandelt wird?

MfG
thecreep

  1. Hallo,

      var id = document.getElementById("viewdata").innerHTML;  
    

    id= id.substr(5);
      id=(id+dx);
      alert(id+" dx:"+dx);

      
    
    > Nach dem substr-Aufruf steht in id nur noch eine Zahl  
      
    nein, hier liegt dein Trugschluss: Nach dem substr()-Aufruf ist id immer noch ein String - auch wenn er ausschließlich Zeichen enthält, die als Zahl interpretierbar sind.  
      
    
    > Das addieren läuft allerdings falsch, da id immernoch als string behandelt wird bekomme ich leider z.B. "15-1 dx:-1" oder z.B. "151 dx:1" raus.  
      
    Klar, beide Operanden werden als Strings verkettet.  
      
    
    > Wie kann ich bewirken, dass id als Zahl behandelt wird?  
      
    Du kannst die Umwandlung in eine Zahl erzwingen, indem du eine Operation durchführst, die nur für Zahlenwerte definiert ist - zum Beispiel 0 subtrahieren oder mit 1 multiplizieren.  
      
    Ciao,  
     Martin  
    
    -- 
    Man sollte immer wissen was man sagt  
     - aber auf keinen Fall alles sagen, was man weiß.  
    
    
    1. Nach dem substr-Aufruf steht in id nur noch eine Zahl

      nein, hier liegt dein Trugschluss: Nach dem substr()-Aufruf ist id immer noch ein String - auch wenn er ausschließlich Zeichen enthält, die als Zahl interpretierbar sind.

      Da hab ich mich schlecht ausgedrückt, ich meinte das id nur noch eine Zahl beinhaltet :)

      Jetzt gehts einwandfrei, Danke

      MfG
      thecreep

      1. @@thecreep:

        nuqneH

        nein, hier liegt dein Trugschluss: Nach dem substr()-Aufruf ist id immer noch ein String - auch wenn er ausschließlich Zeichen enthält, die als Zahl interpretierbar sind.

        Da hab ich mich schlecht ausgedrückt, ich meinte das id nur noch eine Zahl beinhaltet :)

        Immer noch. Du meintest, dass (der String) id nur noch Ziffern beinhaltet.

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
        1. Hi,

          Da hab ich mich schlecht ausgedrückt, ich meinte das id nur noch eine Zahl beinhaltet :)
          Immer noch. Du meintest, dass (der String) id nur noch Ziffern beinhaltet.

          Du meintest, daß der String id nur noch Ziffern enthält

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
          1. Hallo,

            Da hab ich mich schlecht ausgedrückt, ich meinte das id nur noch eine Zahl beinhaltet :)
            Immer noch. Du meintest, dass (der String) id nur noch Ziffern beinhaltet.

            Du meintest, daß der String id nur noch Ziffern enthält

            ...oder dass er sie beinhält.

            Gruß, Don P

  2. Hallo,

    der Link spricht für sich selbst:
    http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parse_int

    Viele Grüße Novi

    --
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)
  3. Hallo,

    Das addieren läuft allerdings falsch, da id immernoch als string behandelt wird bekomme ich
    leider z.B. "15-1 dx:-1" oder z.B. "151 dx:1" raus.

    parseInt ist gut und recht, kommt auch mit Hex- und Oktalzahlen zurecht und mit Stings wie "123xy" (ergibt 123), oft wird auch empfohlen 0 zu addieren, aber die einfachste Methode ist immer noch der Plus-Operator: +str konvertiert str zu einer Zahl, in deinem Fall also +id + (+dx) (Klammerung nur zur Sicherheit, damit beim Komprimieren nicht aus Versehen ++dx enststeht, was etwas anderes wäre).

    Die ECMAScript-Spezifikation sagt:

    11.4.6 Unary + Operator
    The unary + operator converts its operand to Number type.
    The production UnaryExpression : + UnaryExpression is evaluated as follows:

    1. Evaluate UnaryExpression.
    2. Call GetValue(Result(1)).
    3. Call ToNumber(Result(2)).
    4. Return Result(3).

    In Punkt 3 ist die Konvertierung zur Zahl mit ToNumber() vorgeschrieben, und so geschieht es auch.

    Gruß, Don P