2015-08-10 13 views
23

Also versuche ich herauszufinden, wie ich mein Programm bekommen kann, um die .0 nach einer ganzen Zahl zu verlieren, wenn ich keine Dezimalstellen brauche.Wie konvertiert man double in int in swift

@IBOutlet weak var numberOfPeopleTextField: UITextField! 
@IBOutlet weak var amountOfTurkeyLabel: UILabel! 
@IBOutlet weak var cookTimeLabel: UILabel! 
@IBOutlet weak var thawTimeLabel: UILabel! 


var turkeyPerPerson = 1.5 
var hours: Int = 0 
var minutes = 0.0 

func multiply (#a: Double, b: Double) -> Double { 
    return a * b 
} 

func divide (a: Double , b: Double) -> Double { 
    return a/b 
} 

@IBAction func calculateButton(sender: AnyObject) { 
    var numberOfPeople = numberOfPeopleTextField.text.toInt() 
    var amountOfTurkey = multiply(a: 1.5, b: Double(numberOfPeople!)) 
    var x: Double = amountOfTurkey 
    var b: String = String(format:"%.1f", x) 
    amountOfTurkeyLabel.text = "Amount of Turkey: " + b + "lbs" 

    var time = multiply(a: 15, b: amountOfTurkey) 
    var x2: Double = time 
    var b2: String = String(format:"%.1f", x2) 
    if (time >= 60) { 
     time = time - 60 
     hours = hours + 1 
     minutes = time 
     var hours2: String = String(hours) 
     var minutes2: String = String(format: "%.1f", minutes) 

     cookTimeLabel.text = "Cook Time: " + hours2 + " hours and " + minutes2 + " minutes" 
    }else { 
     cookTimeLabel.text = "Cook Time: " + b2 + "minutes" 
    } 

} 

}

Muss ich machen eine if-Anweisung irgendwie doppelt zu biegen in Int für diese zu arbeiten?

+0

Verwenden Sie die Funktion toInt() wie NAME DES DOUBLEVALUE.?toInt() –

Antwort

40

können Sie verwenden:

Int(yourDoubleValue) 

dies konvertieren Doppel in int.

oder wenn Sie String-Format verwenden 0 statt 1:

String(format: "%.0f", yourDoubleValue) 

dies wird nur ohne Dezimalstellen Ihr Double-Wert anzuzeigen, ohne es umgewandelt in int.

+0

Ok thx, so ist es wie der String (x) auch –

+6

Dies ist nicht gut Ansatz und es wird abstürzen, wenn es Grenzen von Int überschreitet . Z.B. 'Int (Double.greatestFiniteMagnitude)' –

2

Eine allgemeinere Möglichkeit zur Unterdrückung (nur) der Dezimalstelle .0 in einer Zeichenfolgendarstellung eines Double-Werts ist die Verwendung von NSNumberFormatter. Es berücksichtigt auch das Zahlenformat des aktuellen Gebietsschemas.

let x : Double = 2.0 
let doubleAsString = NumberFormatter.localizedString(from: (NSNumber(value: x), numberStyle: .decimal) 
// --> "2" 
+0

Derzeitiger rechter Weg: NumberFormatter.localizedString (aus: NSNumber (Wert: self), Zahl: .decimal) –

10

Es ist besser, mit einer Größe von Double Wert zu überprüfen, bevor Sie es konvertieren sonst könnte es zum Absturz bringen.

extension Double { 
    func toInt() -> Int? { 
     if self > Double(Int.min) && self < Double(Int.max) { 
      return Int(self) 
     } else { 
      return nil 
     } 
    } 
} 

Der Absturz ist leicht zu zeigen, nur Int(Double.greatestFiniteMagnitude) verwenden.

Swift 3.1

Jetzt können Sie neue initializer Int(exactly:) verwenden, die auch die Grenze Prüfung funktioniert und gibt nil wenn es nicht passt.

Verwandte Themen