2015-08-10 24 views
23

Bu nedenle, ondalık basamaklara gerek duymadığım zaman tam sayıdan sonra .0 programımı nasıl kaybedebileceğimi anlamaya çalışıyorum.Hızlı bir şekilde çift dönüşlü dönüştüre dönüştürme

@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" 
    } 

} 

}

Size bir bunun işe yaraması için deyim nasılsa Int içine çift çevirmek eğer gerekiyor mu?

+0

toInt() Funktion gibi kullanımı NAME OF THE DOUBLEVALUE.?toInt() –

cevap

40

Sen kullanabilirsiniz:

Int(yourDoubleValue) 

bu int çift dönüştürecektir.

veya dize biçimi kullanımını 0 1 yerine kullandığınızda:

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

o int dönüştürülür olmadan bu sadece, hiçbir ondalık basamağa ile Çift değeri görüntüler.

+0

Ok thx, bu nedenle String (x) de –

+6

gibi Bu iyi bir yaklaşım değildir ve Int'in sınırları aşarsa çökecektir . Örneğin. Int (Double.greatestFiniteMagnitude) –

2

Double değerinin dize olarak temsil edilmesinde .0 ondalık basamağın basılmasına (yalnızca) daha genel bir yol, NSNumberFormatter öğesinin kullanılmasıdır. Geçerli yerel ayarın sayı biçimini de dikkate alır.

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

Geçerli yol: NumberFormatter.localizedString (from: NSNumber (value: self), number: .decimal) –

10

O bunu kalabileceğini aksi dönüştürmek önce Double değerin bir boyut doğrulamak için daha iyidir.

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

kazasında sadece Int(Double.greatestFiniteMagnitude) kullanın göstermek kolaydır. 3.1

Swift

Şimdi de sınır kontroller yapar ve onu uymuyorsa nil döndürür yeni başlatıcı Int(exactly:) kullanabilirsiniz.

İlgili konular