小费计算器应用程序和显示数据的问题

Issues with tip calculator app and displaying data

大家好我的代码需要一些帮助 当我 select 设置中的默认小费率并返回时,百分比标签似乎乘以 100。 我给一位教授发了一封电子邮件,他告诉我:

(("It looks like it's because you are saving the default tip rate as "20" 而不是 "0.20" 所以当你乘以 "100" 你得到 "2000" 而不是 "20"."))) 有几种方法可以解决这个,但最简单的方法是在计算小费金额时除以 100。

非常感谢有人帮助我制作我需要将金额除以 100 的代码行。 下面我将留下我的代码的一些屏幕截图。 Views的截图顺序是:

这是我的 MainViewController 代码

import UIKit
class ViewController: UIViewController, SettingsDelegate {
// Inputs
@IBOutlet weak var amountTextField: UITextField!
//Labels
@IBOutlet weak var TipPercentageLabel: UILabel!
@IBOutlet weak var numberOfPersonLabel: UILabel!
@IBOutlet weak var tipAmountLabel: UILabel!
@IBOutlet weak var totalBillLabel: UILabel!
@IBOutlet weak var billPerPersonLabel: UILabel!
//Slider & Stepper
@IBOutlet weak var tipSlider: UISlider!
@IBOutlet weak var personsStepper: UIStepper!
//Variables
var tipPercentage : Double = NSUserDefaults.standardUserDefaults().doubleForKey("DefaultTipRate") ?? 0.20
var numberOfPerson:Int = 1
let numberFormatter:NSNumberFormatter = NSNumberFormatter()


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    tipAmountLabel.text = "[=10=].00"
    totalBillLabel.text = "Bill Total"
    billPerPersonLabel.text = "[=10=].00"
    numberOfPersonLabel.text = "1"
    self.amountTextField.becomeFirstResponder()

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


    tipSlider.minimumValue = 0
    tipSlider.maximumValue = 100
    tipSlider.value = 20
    tipSlider.addTarget(self, action: "sliderTipChanged:", forControlEvents: .ValueChanged)

    personsStepper.minimumValue = 1
    personsStepper.maximumValue = 30
    personsStepper.value = 1
    personsStepper.addTarget(self, action: "sliderPersonChanged:", forControlEvents: .ValueChanged)

    amountTextField.text = ""

    refreshCalculation()

}

@IBAction func OnEditingFieldBill(sender: AnyObject) {

    refreshCalculation()
}

func refreshCalculation() {

    numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
    if let amount = numberFormatter.numberFromString(amountTextField.text!) as? Double {

        let tipAmount = amount * tipPercentage
        let totalBill = amount + tipAmount
        let billPerPerson = totalBill / Double(numberOfPerson)
        numberFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
        tipAmountLabel.text = numberFormatter.stringFromNumber(tipAmount)
        totalBillLabel.text = numberFormatter.stringFromNumber(totalBill)
        billPerPersonLabel.text = numberFormatter.stringFromNumber(billPerPerson)

    } else {

        tipAmountLabel.text = "-"
        totalBillLabel.text = "-"
        billPerPersonLabel.text = "-"
    }

    numberFormatter.numberStyle = NSNumberFormatterStyle.PercentStyle
    numberFormatter.minimumFractionDigits = 1
    numberFormatter.maximumFractionDigits = 1
    TipPercentageLabel.text = self.numberFormatter.stringFromNumber(tipPercentage)

   numberOfPersonLabel.text = "\(numberOfPerson)"

} 

@IBAction func sliderTipChanged(sender: UISlider) {

    tipPercentage = Double(round(tipSlider.value)) / 100
    refreshCalculation()
}


@IBAction func StepperPersonChanged(sender: UIStepper) {
    numberOfPerson = Int(round(personsStepper.value))
    refreshCalculation()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let SettingsViewController = segue.destinationViewController as? SettingsViewController {
        SettingsViewController.delegate = self
        refreshCalculation()
            }
        }
func tipPercentageChanged(newValue: Double) {
    TipPercentageLabel.text = "\(newValue)%"
    tipPercentage = newValue
    refreshCalculation()
}
}

这里是设置视图代码

import UIKit
protocol SettingsDelegate{
func tipPercentageChanged(newValue : Double)
}
class SettingsViewController: UIViewController {
@IBOutlet weak var tipControl: UISegmentedControl!
var tipRates: Double?
var destName : String!
var delegate :SettingsDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

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

在设置视图中进行更改就足够了,因为您已经为其指定了正确的费率名称,您还应该将其设为费率

var tipRate = [5, 10, 15, 20, 25, 30]

var tipRate = [0.05, 0.10, 0.15, 0.20, 0.25, 0.30]

您也可以删除下一行,因为它不需要强制转换为 Double。