• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

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