Beim Addieren und Umwandeln von Strings auf Single/Word immer falsche Werte...

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Beim Addieren und Umwandeln von Strings auf Single/Word immer falsche Werte...

      Hallo Leute,

      langsam fange ich an zu verzweifeln.

      Wenn ich einen String mit einem Wert Lade und dann mit VAL Umwandel ist der Wert richtig.
      Wenn ich aber 2 Strings mit einander Addiere und diesen Wert dann mit VAL Umwandel ist der Wert völlig daneben.

      Quellcode

      1. Sub Umrechnen
      2. Dim Teil_1 As String * 3
      3. Dim Teil_2 As String * 4
      4. Dim Teil_3 As String * 7
      5. Dim Teil_7 As Word
      6. Teil_1 = "573"
      7. Teil_2 = "3237"
      8. Teil_3 = Teil_1 + Teil_2
      9. Teil_7 = Val(teil_3)
      10. Cls
      11. Locate 1 , 1
      12. Lcd Teil_3
      13. Locate 2 , 1
      14. Lcd Val(teil_1) ; " " ; Val(teil_2) ; " " ; Teil_7
      15. End Sub
      Alles anzeigen


      In obigem Beispiel erhalte ich auf dem Display folgende Ausgabe.
      Zeile:1 5733237
      Zeile2: 573 3237 31605

      Der letzte Wert in der 2ten Zeile sollte eigentlich auch 5733237 lauten.
      Kann mir jemand sagen was ich anders machen muss damit ich 2 String addieren kann und den Wert als Zahl weiter berechnen kann ?

      Gruß
      Thomas
    • BASCOM-Quellcode

      1. Sub Umrechnen
      2. Dim Teil_1 As String * 3
      3. Dim Teil_2 As String * 4
      4. Dim Teil_3 As String * 7
      5. Dim Teil_7 As Word
      Dim in einer Sub geht zwar sind aber globale Variablen.

      BASCOM-Quellcode

      1. Sub Umrechnen
      2. Local Teil_1 As String * 3
      3. Local Teil_2 As String * 4
      4. Local Teil_3 As String * 7
      5. Local Teil_7 As Word
      Nimm Local und dann sollte es gehen.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Ich bin mehr für hasta. Das Ergebnis der Wandlung mit Val sollte schon in einen 'Zahlenraum' reinpassen. Bei word bis 64000 (grob!), deswegen ein long mit wasweißich viel Stellen ^^
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Hallo Leute,

      danke für die Unterstützung.
      Klar das Problem war das Word zu klein ist. (Kommt davon wenn man nicht nochmal nachliest) :(
      Long passt :)

      @ DJMSC,
      Was Du sagst macht Sinn, aber wenn ich es in "Local" ändere dann resetet mein Atmega16 mit LCD jede Sekunde in der ich die Funktion aufrufe.
      Ich weis jetzt nicht ob das etwas damit zu tun hat das ich Bascom mit Wine unter Linux betreibe ?
      Kann ich mir aber nicht ganz vorstellen.
      Keine Ahnung warum es nicht geht.
      Die "Globalen/Localen" variablen Definition habe ich nur gemacht weil ich zu faul war im Programm ganz nach oben zu scrollen ;)

      Auch habe ich festgestellt das ich eine Speicherzelle mehr reservieren muss in der Stringvariablen Definition als ich brauche. Das habe ich aber auch irgendwo mal gelesen das es nötig ist.
      Eigentlich bräuchte ich keine long, sondern double Variable. Ich müsste eigentlich einen Single-Wert errechnen, aber da ich das Komma verschoben habe kann ich mit Long rechnen, das geht auch.
      Bei Single habe ich das selbe Problem, abgehackter Wert. Wenn ich statt Single Double eintrage dann mault Bascom weil ich nur ne Demo Version habe.

      Ich müsste mal das Programm mit "Luna" schreiben. Habe aber noch keine Erfahrung damit.
      Mit Wine unter Linux laufen meine beiden Kerne mit 95% Last und das obwohl der Rechner eigentlich nichts macht.

      Gruß
      Thomas
    • linuxer schrieb:

      Auch habe ich festgestellt das ich eine Speicherzelle mehr reservieren muss in der Stringvariablen Definition als ich brauche. Das habe ich aber auch irgendwo mal gelesen das es nötig ist.
      Musst du nicht. Nur braucht ein string im Speicher ein byte mehr, wo dessen Länge drin steht. Das macht bascom aber automatisch. Ist aber gut zu wissen, wenn man overlays verwendet.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • linuxer schrieb:

      Ich müsste mal das Programm mit "Luna" schreiben. Habe aber noch keine Erfahrung damit.
      Mit Wine unter Linux laufen meine beiden Kerne mit 95% Last und das obwohl der Rechner eigentlich nichts macht.
      Ahha dann hat wohl eine Stringvariable kein Endzeichen mehr. Dies könnte mich veranlassen auch umzusteigen. Warte aber erstmal dein Bericht ab.
      Gruß
    • linuxer schrieb:

      Ich müsste mal das Programm mit "Luna" schreiben. Habe aber noch keine Erfahrung damit.
      Dann schau Dir vielleicht auch mal "B4R" an. Finde ich besser als Luna (habe davon nur die Infos gelesen und fand etwas unklar), B4R benutze ich sporadisch wegen ESP8266 und ESP32). Das kann auch komplexere Statements in einer Zeile. Ich benutze ausgiebig Xmegas, die kann B4R nicht, daher Bascom gerne dafür.