swift 3 : Rounding a result embedded in text in a simple calculator

标签 swift decimal rounding calculator reset

我对 Swift 3 完全陌生,我唯一的经验是在 Microsoft FrontPage、Facebook 等出现之前的日子里使用一些基本的 HTML 和 JavaScript。

我正在尝试制作一个(相对)简单的计算器,它会进行一些数学运算来计算我需要为患者提供多少液氧。

我遇到的两个问题是,如果有人将字段留空,应用程序就会崩溃。第二个是我希望结果保留一位小数。

我找到了有关空白字段和​​舍入的答案,但不是我的确切示例,我只是遇到了不知道如何修复的错误。

请记住,对任何以“你为什么做...”开头的问题的回答都是双重的:1) 因为我在网上看到了这样的例子,2) 我不知道我在做什么。

代码如下。

//
//  ViewController.swift
//  AECalc
//
//  Created by Marco Metzler on 12/31/16.
//  Copyright © 2016 Metzler. All rights reserved.
//

import UIKit
import Foundation

class ViewController: UIViewController {

@IBOutlet weak var PTLPM: UITextField!
@IBOutlet weak var LTVVents: UITextField!
@IBOutlet weak var Vents: UITextField!
@IBOutlet weak var EmergLPM: UITextField!
@IBOutlet weak var Ground: UITextField!
@IBOutlet weak var Flight: UITextField!
@IBOutlet weak var LOX: UILabel!



@IBAction func Calculate(_ sender: UIButton) {
    let aText = PTLPM.text
    let bText = LTVVents.text
    let cText = Vents.text
    let dText = EmergLPM.text
    let eText = Ground.text
    let fText = Flight.text
    let a = Float(aText!)
    let b = Float(bText!)
    let c = Float(cText!)
    let d = Float(dText!)
    let e = Float(eText!)
    let f = Float(fText!)
    let PtReq = (a! + d!)
    let LTVTot = (b! * 20)
    let VTot = (c! * 15)
    let VentTot = (LTVTot + VTot)
    let AllOx = ((VentTot + PtReq) * 60)
    let TotTime = (e! + f!)
    let answer = ((AllOx * TotTime) / 804)

    LOX.text = "LOX required: \(answer) liters."

}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    //The code below hides the keypad when you tap blank space on the screen. I would prefer to have a "done" button on the keypad.

    self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

最佳答案

问题 #1:空白字段导致应用程序崩溃

这是因为您使用 ! 强制展开可选值:

let aText = PTLPM.text
let a = Float(aText!)
let PtReq = (a! + d!)

如果文本字段为空,或者 String 无法转换为 Float,这将导致崩溃。

相反,通过安全地展开它们来检查值是否为 nil。一种方法是使用一些 guard 语句。

guard let aText = PTLPM.text else {
    // handle case where text is nil here
}

guard let a = Float(aText) else {
    // handle case where the text is not a valid Float here
}

这将确保您的变量在继续之前是实际值。

问题 #2:舍入

这只需要使用采用以下格式的String 构造函数:

LOX.text = String(format: "%.1f", answer)

关于 swift 3 : Rounding a result embedded in text in a simple calculator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433293/

相关文章:

swift - Bonjour Discovery 的 RxSwift 和嵌套订阅

ios - 如何根据 TextView 内容大小在 ScrollView 中设置启用或禁用滚动?

c# - ASP Core Minimal API - 如何使用 System.Text.Json 发送不带尾随零的小数?

java - 如何在DB中插入十进制值?

PHP:fileperms() 值并转换这些

c# - 十进制值舍入 .99

ruby - 将 ruby float 向上或向下舍入到最接近的 0.05

ios - UITableView - 行 - 多重对齐

android如何使gridview项目角变圆

ios - Swift - SecondViewController 到 FirstViewController : fatal error: unexpectedly found nil