Итак, я пытаюсь выяснить, как я могу заставить свою программу потерять .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, чтобы это работало?
Вы можете использовать:
Int(yourDoubleValue)
это преобразует double в int.
или когда вы используете формат String, используйте 0 вместо 1:
String(format: "%.0f", yourDoubleValue)
это просто отобразит ваше двойное значение без десятичных знаков без преобразования его в int.
Int
. Например. Int(Double.greatestFiniteMagnitude)
Лучше проверить размер значения 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
, если он не подходит.
Int(exactly:)
не сможет преобразовать значения Double
которые не могут быть точно преобразованы в целое число. Например, Int(exactly: 3.1)
вернет nil
.
Более общий способ подавить (только) десятичное место .0 в строчном представлении значения Double
- использовать NSNumberFormatter
. Он также рассматривает формат номеров текущего языка.
let x : Double = 2.0
let doubleAsString = NSNumberFormatter.localizedStringFromNumber(NSNumber(double:x), numberStyle: .DecimalStyle)
// --> "2"