• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Eine überwältigende Zahl von Einsendungen wartet nun auf Euch, um begutachtet zu werden! Schaut selbst, welche Blüten das Thema hervorgebracht hat und stimmt dann ab, was davon Euch am besten gefällt. Hier geht es lang zur Abstimmung --> 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:

belinea

deaktivierter Benutzer
Registriert
12.07.08
Beiträge
351
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
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
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