• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Double in Integer casten

belinea

deaktivierter Benutzer
Registriert
12.07.08
Beiträge
351
Ich habe Zahlen als Double Werte vorliegen (2.0, 8.0, 16.0).

Die ich zuvor die Floor Funktion verwendet habe müssen die Zahlen als Double vorliegen und können kein Integer sein. Nun weigert sich die Double Zahl aber vehement in eine Integer gewandelt zu werden. Ist ja auch logisch, da der Double wert ja auch einen anderen Wert als eine Ganzzahl haben könnte.

Aber die Anzeige von "Noch 2.0 Stunden, 9.0 Minuten und 6.0 Sekunden" liest sich schon etwas komisch.

Mein Code ist folgender: Ich habe die Anzahl von verbleibenden Sekunden (diiff) in Stunden, Minuten und Sekunden umgerechnet und möchte dann daraus die Anzeige "02:09:06" formen.

Code:
let diff = Double(240010) // Differenz in Sekunden
let tag = floor(diff / (3600*24))
let std  = floor(diff / 3600 % 24)
let min  = floor(diff / 60 % 60)
let sek  = floor(diff % 60)


In PHP habe ich das so gelöst:
Code:
$std  = floor($diff / 3600 % 24);
$min  = floor($diff / 60 % 60);
$sek  = floor($diff % 60);
$resultstring = str_pad($std, 2 ,'0', STR_PAD_LEFT).':'.str_pad($min, 2 ,'0', STR_PAD_LEFT).':'.str_pad($sek, 2 ,'0', STR_PAD_LEFT);


Habt ihr vielleicht einen Tip für mich übrig? Vielen Dank.
 
Zuletzt bearbeitet:
Nachdem ich Stunden probierte habe, hat es jetzt nach dem abschicken des Postings geklappt. Warum nur die erste Methode funktioniert und bei den anderen dreien die Fehlermeldung kommt das ein Double nicht in Integer gewandelt werden kann, kann ich mir (noch) nicht erklären.

Diese Methode funktioniert:
Code:
let tag = Int(floor(diff / (3600*24)))


Folgende Methoden funktionieren nicht:
Code:
let tag = floor(diff / (3600*24)) as Int
let tag:Int = floor(diff / (3600*24))
let tag:Int = floor(diff / (3600*24)) as Int
 
Warum nur die erste Methode funktioniert und bei den anderen dreien die Fehlermeldung kommt das ein Double nicht in Integer gewandelt werden kann, kann ich mir (noch) nicht erklären.
Das ist so, weil Swift keine implizite Typumwandlung kennt, wie andere Programmiersprachen. Swift ist was Typsicherheit angeht extrem pingelig. Du musst also Typen explizit umwandeln.
 
  • Like
Reaktionen: belinea