我有一个名为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)
}
}
答案 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))