2015-08-10 7 views
23

Итак, я пытаюсь выяснить, как я могу заставить свою программу потерять 0. после целого числа, когда мне не нужны никакие десятичные знаки.Как преобразовать double в int в 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" 
    } 

} 

}

мне нужно сделать, если заявление каким-то образом превратить Double в Int для этого работать ли?

+0

использовать toInt() Funktion как НАЗВАНИЕ DOUBLEVALUE.?toInt() –

ответ

40

Вы можете использовать:

Int(yourDoubleValue) 

это будет конвертировать двойной Int.

или при использовании Струнный использовать формат 0 вместо 1:

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

это будет просто отображать двойное значение без каких-либо знаков после запятой, не конвертируются его в целое.

+0

Ok thx, поэтому его как String (x) также –

+6

Это нехороший подход, и он потерпит крах, если он превысит границы 'Int' , Например. 'Int (Double.greatestFiniteMagnitude)' –

2

Более общий способ подавления (только). Десятичного разряда .0 в строчном представлении значения Double состоит в использовании NSNumberFormatter. Он также рассматривает формат номеров текущего региона.

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

Текущий правильный путь: NumberFormatter.localizedString (из: NSNumber (значение: self), number: .decimal) –

10

Лучше проверить размер Double значения, прежде чем превратить его в противном случае это может произойти сбой.

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

Грохот легко показать, просто использовать Int(Double.greatestFiniteMagnitude).

Swift 3,1

Теперь вы можете использовать новый инициализатор Int(exactly:), что делает также граничную проверку и возвращает nil, если он не подходит.

Смежные вопросы