Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 3:在一个简单的计算器中对嵌入文本的结果进行四舍五入_Swift_Decimal_Rounding_Calculator_Reset - Fatal编程技术网

Swift 3:在一个简单的计算器中对嵌入文本的结果进行四舍五入

Swift 3:在一个简单的计算器中对嵌入文本的结果进行四舍五入,swift,decimal,rounding,calculator,reset,Swift,Decimal,Rounding,Calculator,Reset,我对Swift 3绝对是新手,我唯一的经验是在微软FrontPage、Facebook等出现之前的几天里,一些基本的HTML和JavaScript 我正在尝试做一个(相对)简单的计算器,它会做一些数学运算,来计算我需要多少液氧给病人 我遇到的两个问题是,如果有人将字段留空,应用程序将崩溃。第二,我希望结果保留到小数点后一位 我已经找到了关于空白字段和舍入的答案,但不是我的确切示例,我只是得到了我不知道如何修复的错误 请记住,任何以“你为什么要做…”开头的问题的答案都是双重的:1)因为我在网上看到

我对Swift 3绝对是新手,我唯一的经验是在微软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!)
如果文本字段为空,或者
字符串
无法转换为
浮点
,则会导致崩溃

相反,通过安全地展开这些值,检查它们是否为
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:取整

这只需要使用
字符串
构造函数,该构造函数采用以下格式:

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

如果字段为空,您希望发生什么情况?如果字段未转换为浮点值,您希望执行什么操作?使用默认值?打印错误?这个问题太广泛了。“我遇到的两个问题是,如果有人将某个字段留空,应用程序将崩溃。第二个问题是,我希望结果保留到小数点后一位。”你只是把整个应用程序扔给我们,然后说“修复这个”。在代码中的一个精确点选择一个问题,比如说你正在做什么,你想发生什么,以及发生了什么。你提到你找到了关于空白字段和舍入的答案,但是它们导致了错误。你能发布这些错误吗?这样我们就可以看到你尝试过的和没有成功的地方,并从那里指导你。你好,瓦卡瓦马。如果字段留空,那么我希望应用程序将其视为零。抱歉说得含糊不清……谢谢。你好,贝克,我在下面插入了nathan提供的文本,并将其格式化为我所知道的最好的格式:LOX.text=String(格式:“%.1f”,“LOX required:(答案)lills.”)应用程序运行时,不会出现任何错误,但它总是返回0.0。有什么想法吗?你好,内森…谢谢你的帮助。我插入了您提供的代码,并将其格式化为我所知的最佳格式:LOX.text=String(格式:“%.1f”,“LOX required:(response)lills”))应用程序运行时,不会出现任何错误,但不管我在字段中输入什么数字,它总是返回0.0。所以,舍入的工作原理和我想要的完全一样(谢谢!),但它打破了计算。有什么想法吗?字符串构造函数的第二个参数应该是数字,而不是字符串。试试这个:
LOX.text=String(格式:“%.1f”,答案)
nathan…谢谢。它起作用了。在回答之前,我是否需要输入一个文本标签?我想让结果在屏幕上显示“所需液氧:34.5升”。您的代码工作正常,返回“34.5”。我曾试图将其格式化以打印出整个声明,但没有效果。你会建议在计算结果之前在屏幕上的某个地方使用一个简单的非活动标签吗?是的,像你原来的问题一样使用
UILabel
。类似于
LOX.text=“LOX required:\(字符串(格式:“%.1f”,答案))升“
工作正常。再次感谢!我只是不知道正确的语法。