Как конвертировать double в int в swift

19

Итак, я пытаюсь выяснить, как я могу заставить свою программу потерять .0 после целого числа, когда мне не нужны никакие десятичные разряды.

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

}

}

Нужно ли мне заставить оператор if каким-то образом превратить Double в Int, чтобы это работало?

  • 0
    используйте функцию toInt (), например, NAME OF DOUBLEVALUE .?toInt ()
Теги:

3 ответа

34
Лучший ответ

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

Int(yourDoubleValue)

это преобразует double в int.

или когда вы используете формат String, используйте 0 вместо 1:

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

это просто отобразит ваше двойное значение без десятичных знаков без преобразования его в int.

  • 0
    Хорошо, спасибо, так что это как String (x) также
  • 15
    Это не очень хороший подход, и он потерпит крах, если превысит границы Int . Например. Int(Double.greatestFiniteMagnitude)
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, если он не подходит.

  • 2
    Int(exactly:) не сможет преобразовать значения Double которые не могут быть точно преобразованы в целое число. Например, Int(exactly: 3.1) вернет nil .
  • 0
    @IsaacOveracker Вы правы, это была неверная информация. Я удалил это.
Показать ещё 3 комментария
1

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

let x : Double = 2.0
let doubleAsString = NSNumberFormatter.localizedStringFromNumber(NSNumber(double:x), numberStyle: .DecimalStyle) 
// --> "2"
  • 0
    Текущий правильный путь: NumberFormatter.localizedString (from: NSNumber (значение: self), number: .decimal)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню