Zahlen konvertieren

Willkommen in dieser Lektion über Zahlen konvertieren aus unserer Reihe “Swift lernen”.

In dieser Lektion beschäftigen wir uns mit der Konvertierung von Zahlen. Wie wir bereits in der Lektion über Zahlen gelernt haben gibt es Gleitkommazahlen und ganzwertige Zahlen. Bei der Kombination beider Typen kann es zu Fehlern bzw. zu Ungenauigkeiten kommen. Um dies zu vermeiden lernen wir Zahlen-Datentypen zu anderen Zahlen-Datentypen konvertieren zu können. Ausserdem lernen wir wie aus Zahlen-Datentypen Strings werden und wie man Strings in Integer- oder Double-Werte umwandelt.

Für diesen Teil gibt es auch ein Video Tutorial hier auf YouTube.

Gleitkommazahl konvertieren

 

Wir sehen die Variablen „ganzzahl“ und „gleitkommazahl“ die als Integer und Double interpretiert werden. Versuchen wir nun diese beiden zu addieren erhalten wir von Xcode eine Fehlermeldung „Could not find an overload for „+“ that accepts the supplied arguments“ was grob gesagt bedeutet das Xcode nicht weiss wie es die beiden Argumente – in unserem Fall „ganzzahl“ und „gleitkommazahl“ – miteinander durch den „+“-Operator verknüpfen soll. Um diese Berechnung durchzuführen konvertieren wir den Integer „ganzzahl“ in einen Doublewert um. Dies erfolgt einfach indem wir den Variablennamen in runde Klammern vor das Wort „Double“ setzen.

Je nachdem welchen Datentypen wir verwenden müssen oder wollen können wir uns hier auch für einen Float entscheiden.

Probiert doch einmal aus was passiert wenn ihr „ganzzahl“ vor der Berechnung statt in einen Double in einen Float konvertiert.

Wir erhalten eine Fehlermeldung! Aber warum ist das so? Swift nimmt automatisch an das „gleitkommazahl“ ein Double-Wert ist, daher erhalten wir wieder die Fehlermeldung das wir unterschiedliche Datentypen miteinander addieren wollen.
Richtig könnte dies z.B. so aussehen

Wir konvertieren beide Variablen zu Float-Werten und können diese somit korrekt miteinander addieren, denn die Konvertierung findet vor der Rechenoperation statt.

Natürlich könnten wir auch von Anfang an die Variable  zahlPi als Float deklarieren um uns  Float(ganzzahl) zu sparen.

 

Ganzzahlen konvertieren

 

In diesem Beispiel haben wir die Berechnung zwischen einer Ganzzahl und einer Gleitkommazahl. Wir möchten aber in unserem Ergebnis sicherstellen das wir einen Integer erhalten, weil wir dies z.B. in einer Schleife als Zähler verwenden wollen. Wie bei der Gleitkommazahl-Konvertierung müssen wir den Wert von dem wir wissen oder auch annehmen das er kein Integer ist, durch den Aufruf „Int(gleitkommazahl)“ vor der Berechnung in einen ganzahligen Wert konvertieren.

 

Zahlen in Strings konvertieren

Sie werden später sehr oft auf die Problematik treffen wie Sie Zahlen zu einem Strings konvertieren. Wir erhalten die selbe Problematik wie auch bei verschiedenen Zahlen-Datentypen, dass wir unterschiedliche Typen nicht miteinander verknüpfen können ohne diese korrekt zu konvertieren.

 

Nach dem selben Prinzip wie in den vorherigen Beispielen können wir durch ein String(Variablenname) Werte in den gewünschten Datentyp umwandeln. Man kann alternativ auch einfach die Zahl in den String mit der String Formatierung einfügen. Man sollte aber dennoch Wissen das man einen Int Problemlos zu einen String konvertieren kann ohne das man folgendes schreiben muss.

Strings in Zahlen konvertieren

Jetzt wird es das erste mal in Swift etwas seltsam, da wir das erste mal einen Optionalen Wert haben. Gut zu erkennen in Zeile 2, wo wir ein Ausrufezeichen am Ende der Zeilen haben. Der folgende Programmcode demonstriert wie wir einen String zu einer Zahl umwandeln können.

Wir rufen dabei den Konstruktor von Int auf, welcher einen String verarbeiten kann. Konstruktoren lernen wir später noch im Kapitel über Strukturen und Klassen kennen. Den Wert dieser Umwandlung weisen der  Int-Variable zahl zu.  Außerdem haben wir ein Ausrufezeichen hinter den Klammern. Was es mit dem Ausrufezeichen auf sich hat lernen wir in der Lektion über „Optionals“ kennen.

Für Gleitkommazahlen gilt das gleiche Prinzip wie bei Strings. Vor Swift 2 musste man hier noch auf die Objective-C Runtime zurückgreifen. Das ist zum Glück nicht mehr nötig.

 

Wie geht es weiter?

In der nächsten Lektion werden wir das Thema Type Aliases behandeln, mit denen es möglich ist alternative Namen für existierende Typen zu erstellen.

Ich hoffe Sie hatten Spass mit dieser Lektion. Bis zum nächsten mal!

Previous post

Swift lernen: Konstanten

Next post

Swift lernen: Type Alias

The Author

Ralf Peters

Ralf Peters

Ralf Peters ist Softwareentwickler – speziell im Bereich iOS/OS X –, Fachbuchautor und Internet-Trainer. Als begeisterter Apple-Fan und Hardware-Bastler ist er in verschiedenen Projekten sowohl beruflich als auch privat tätig und schneidert u.a. iOS Applikationen auf Kundenwünsche zu. Neben seiner beruflichen Tätigkeit betreibt er zusammen mit Stefan Popp den ersten deutschen Swift-Blog, in dem er mit Hilfe seiner Erfahrung Einsteigern und Fortgeschrittenen durch kostenlose Tutorials und Videos Wissen vermittelt.

18 Comments

  1. Birlie
    20. August 2014 at 10:00 — Antworten

    Seit Beta5 wurde z.B. bridgeToObjectiveC() entfernt. Hier stehen noch mehr Änderungen welche im Tutorial verwendet werden: http://www.raywenderlich.com/79115/xcode6-beta5-swift-tutorial-updates

    Wäre prima wenn die tollen Tutorials hier im swift-blog aktuell bleiben würden!

    • 20. August 2014 at 18:08 — Antworten

      Hallo Birlie,
      natürlich hast du Recht und wir sind auch immer stets darum bemüht alles up-to-date zu halten. Also Danke für deine Hinweis.

      LG
      – Ralf

  2. Flo
    14. Oktober 2014 at 19:01 — Antworten

    Hallo,
    was mache ich, wenn ich von einem Textfeld einen Typ String habe und möchte diesen in Float umwandeln?

    Grüße
    Florian

    • 14. Oktober 2014 at 22:43 — Antworten

      Hallo Flo,
      ich habe dir hier zwei Möglichkeiten zusammen gefasst. Ich empfehle dir aber umbedingt einen Double statt eines Floats zu verwenden, da er wie du sehen wirst einen genaueren Wert konvertiert.

      var textFeld = UITextField()
      textFeld.text = „0.12“

      var floatValue : Float = NSString(string: textFeld.text).floatValue

      var doubleValue : Double = NSString(string: textFeld.text).doubleValue

      println(floatValue) // -> 0.119999997317791

      println(doubleValue) // -> 0.12

      Ich hoffe ich konnte dir weiterhelfen.
      Grüße
      Ralf

  3. stelios
    24. November 2014 at 19:08 — Antworten

    bin gerade dabei eine kleine app zu programmieren.
    hab also 3 textfelder.in zwei von denen möchte ich jeweils eine zahl eingeben
    und in dem dritten textfeld soll die summe angezeigt werden,sobald ich auf dem entsprechenden button klicke.kreig das einfach nicht hin….

  4. stelios
    25. November 2014 at 18:36 — Antworten

    vielen dank ….ihr seit die besten

  5. Stelios
    27. November 2014 at 0:26 — Antworten

    hallo zusammen…bin einsteiger in der welt der programmierung,und wiel mit swift anfangen programmierung zu lernen..
    nun möchte ich in ein textfeld ein wort eingeben und das programm soll dann den wert der buchstaben zusammenrechnen..denn jeder buchstabe soll sein eigenen wert haben den ich zuweisen werde.

    z.b var H = 10 , var A = 25, var L = 30, var O = 50
    wenn ich also im textfeld HALLO eingebe ,will ich in einem anderen texfeld die summe der buchstaben..in diesem fall 145!!!
    wie komme ich im textfeld auf einen bestimmten buchstaben ??
    und wie kreig ich das ganze hin????
    kann mir jemand helfen..
    danke !!!

    • Achim
      9. Dezember 2014 at 11:57 — Antworten

      Hi Stelios,

      ich kenne mich mit Swift nicht so gut aus, aber ich denke es gibt sicherlich eine Trim oder Substring Methode, dann kannst du die einzelnen Zeichen auslesen und über ein If und else die gegebenen zahlen in variablen packen und am ende zusammen rechnen lassen.

      Ich denke, dies sollte dein Problem lösen.

  6. Peter
    18. März 2015 at 19:20 — Antworten

    Hallo,
    erst einmal ein Dankeschön für die tollen Tutorials! Im Zusammenhang mit der Konvertierung von Strings in Zahlen etc. stellt sich bei mir die Frage wie es denn mit den Punkten bzw. Kommas steht?

    Im angelsächsischen wird der Punkt, bei uns das Komma verwendet. Wie kann ich z.B. ein UITextField programmieren, dass bei der Eingabe eines Kommas ein Punkt im Hintergrund umgewandelt wird? Oder spielt dies bei Swift keine Rolle, ob Punkt oder Komma gesetzt wird?

    Danke für jegliche Hinweise!

  7. 23. März 2015 at 17:26 — Antworten

    Hallo!

    Hierfür gibt es verschiedene Möglichkeiten. Im Normalfall wäre das wohl der NSNumberFormatter den man für die Darstellung nutzen sollte.

    Das wäre sicherlich mal ein Video Tutorial Wert. Da könnte man das ganze Thema Internationalisierung/Lokalisierung dran nehmen.

    Das wäre sicherlich ein guter Anwendungsfall den man als Beispiel hernehmen kann. Danke!

  8. Bippo
    25. Mai 2015 at 17:15 — Antworten

    Hallo,

    Bräuchte bitte eure Hilfe:

    Ich habe 5 Reihen mit Jeweils 7 Textfelder
    zB. 1.Reihe
    A1, a2,a3,a4,a5,a6 und SummeA
    2.Reihe
    A2 und so weiter

    Die Werte was man eingibt sind nur Zahlen! A1 bis a6 sollen addiert werden und die summe auf SummeA ausgegeben werden.
    Wenn die Summe genau oder über 70 ist sollen 70 dazu addiert werden wenn 69 oder darunter einfach die summe ausgegeben werden. Bei reihe 2-4 sollen wenn 70 oder mehr nur 40 automatisch dazu kommen.

    Könnt ihr mir da bitte helfen. Danke

    • 29. Mai 2015 at 11:00 — Antworten

      Hallo Bippo,

      leider im Moment nicht da ich gerade keine durch mein Privatleben keine Zeit habe. Vielleicht kann dir aber einer unsere User bis dahin eine Lösung posten in den Kommentaren.

      Danke!

  9. Stelios
    29. Mai 2015 at 17:22 — Antworten

    Var erstereihe = a1 + a2 +……..a6
    If erstereihe >= 70 {
    Var summe = erstereihe + 70
    }
    Mit der gleichenlogic können auch alle anderen reihen abgefragt werden und anders addiert werden.
    Hoffe geholfen zuhaben!!

    • bippo
      1. Juni 2015 at 15:10 — Antworten

      Hallo,

      vielen dank für eure Hilfe.
      Ich bin gerade erst dabei das ich mich da einlese in Swift (habe vorher noch garnix mit programmieren zu tun gehabt…)

      swift-blog.de macht richtig gute Videos und auch sehr verständlich – TOP!

      Ich kann googeln und youtube-vids suchen was ich will aber ich finde nicht wirklich eine HowTo wie ich zB das ganze dann mit einer „Tabelle“ dann auslesen kann wo eben der User was eingeben kann (ohne Button sondern alles gleich automatisch sobald die Felder befüllt werden.)

      Wäre nett wenn mir da jemand mal kurz helfen könnte.

      textfelder hab ich schon alle mal zum testen erstellt aber ich bin halt noch „unerfahren“ und kapiere nicht wie ich da den richtigen Code schreibe damit ich eben sage „was da eingegeben wird soll er auslesen und zusammenrechnen…“ wichtig ist halt ohne das ein Button gedrückt wird.

      Vielen lieben Dank

      • 3. Juni 2015 at 15:16

        Hallo bippo,

        das ist leider das Problem von den meisten Tutorials. Wir haben hierfür bereits etwas in der Schublade 🙂
        Mehr in den kommenden Tagen.

        Danke für dein Feedback!

  10. Giuseppe
    13. Juni 2015 at 22:33 — Antworten

    Hallo,

    Bin gerade mit SWIFT am üben und bin hier auf einen Fehler gestossen. Seit Swift 2.0 Beta funktioniert diese Konvertierung bei mir nicht.

    var zahlenString = „3“
    var zString: Int = zahlenString.toInt()!

    Vielen Dank.

    • 13. Juni 2015 at 23:34 — Antworten

      Hi Giuseppe,

      klasse, dass Du auch schon mit Swift 2 (beta) arbeitest.
      Der String in Swift 2 bietet derzeit nicht mehr die toInt() Methode an.

      Was sagst Du zu folgender Vorgehensweise?


      var zahlenString = "3"
      var zahlAlsInt = Int(zahlenString)

      Bitte beachte, dass zahlAlsInt ein Optional ist, denn die Konvertierung kann schief gehen, sollte der String beispielsweise Buchstaben enthalten.

Leave a reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.