应用程序不执行简单的计算

时间:2018-01-17 11:13:58

标签: ios swift

Xcode screenshot

我有一个名为BillSplitter的简单应用程序,用于计算要显示的帐单:输入用户数,帐单总数和小费的文本字段... 当我运行应用程序时,grandTotal输出无法正确计算...总计和提示不计算。

我的应用有3个UITextfields用餐人数,用餐总费用和小费。当我运行应用程序并在3个字段中输入数据并计算我的总计是正确的。例如,如果我输入。 2位客人,晚餐费用为60美元,小费为10%。结果如下:用餐人数:2,提示金额6.00美元,账单金额:60.00美元,总计70美元,每个用餐者支付30美元。我应该得到的是总计66美元,每位用户支付33美元。

我的代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var dinersTextField: UITextField!  // number of diners
    @IBOutlet weak var totalCostTextField: UITextField! // bill total before
    @IBOutlet weak var resultTextLabel: UILabel!  // displays output of calculation
    @IBOutlet weak var tipTextField: UITextField!  // the tip

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func calculate(_ sender: Any) {
        if let dinerStr = dinersTextField.text, let tipStr = tipTextField.text, let totalStr =   totalCostTextField.text, let diner = Double(dinerStr), let tip = Double(tipStr), let total =  Double(totalStr) {
            let formattedDiners = String(format: "%.0f", diner)
            let formattedCost = String(format: "%.2f", total)
            let formattedTip = String(format: "%.2f", (total * tip) / 100)
            let formattedGTotal = String(format: "%.2f", (total + tip))
            let formattedDinerPays = String(format: "%.2f", (total / diner))

            resultTextLabel.text = "The number of diners: \(formattedDiners)\nAmount of Tip: $\(formattedTip)\nAmount of bill: $\(formattedCost)\nGrand Total: $\(formattedGTotal)\nEach diner pays: $\(formattedDinerPays)"
        }
    }
    /// hide keyboard
    @IBAction func dismissKeyboard(_ sender: Any) {
        view.endEditing(true)
    }
}

1 个答案:

答案 0 :(得分:0)

你的数学有问题。您将提示百分比添加到总数而不是提示值,并且您将成本除以用餐者而不是成本+提示。

let formattedGTotal = String(format: "%.2f", (total + tip))
let formattedDinerPays = String(format: "%.2f", (total / diner))

通过你的例子,这意味着你总共有60美元和10%的小费,你正在做的计算是60 + 10给你70.然后计算用餐者付的是60/2给你30岁。

您应该将这两行更改为以下内容:

let formattedGTotal = String(format: "%.2f", total + ((total * tip) / 100))
let formattedDinerPays = String(format: "%.2f", ((total + ((total * tip) / 100)) / diner))

您可以先使用提示计算总数,然后重复使用以提高效率:

let totalWithTip = total + ((total * tip) / 100)

然后你可以使用totalWithTip来计算用餐者使用

支付的费用
let formattedDinerPays = String(format: "%.2f", (totalWithTip / diner))