2017-11-22 9 views
0

Ich habe ein Stück Code für meinen Taschenrechner.Runden Dezimalstellen auf eine benutzerdefinierte Anzahl von Stellen

Und es gibt einen Stepper in den Einstellungen.

Wie kann ich es so machen, dass, wenn der Benutzer einen Stepper auf 2 drückt, die Antwort im Rechner auf 2 Zahlen nach dem Komma gerundet wird?


Jetzt gibt es eine Rundung bis zu 9 Zahlen nach dem Komma.

displayResultLabel.text = String(format: "%.9f", newValue) 


MainViewController.swift

var currentInput: Double { 
    get { 
     return Double (displayResultLabel.text!)! 
    } 
    set { 
     let value = "\(newValue)" 
     let ValueArray = (value.components(separatedBy:".")) 
     if ValueArray[1] == "0" { 
      displayResultLabel.text = "\(ValueArray[0])" 
     } else { 
      displayResultLabel.text = String(format: "%.9f", newValue) 
       //displayResultLabel.text = "\(newValue)" 
     } 
     stillTyping = false 
    } 
} 

SettingsViewController.swift

@IBOutlet weak var Stepr1: UIStepper! 

@IBAction func stepperValueChanged(sender: UIStepper) { 
    //let am = NSNumber(value: sender.value) 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    UserDefaults.standard.set(sender.value, forKey: Savings) 
    //stepperValueChanged(sender: Stepr1) 
    MAXLabel.text = Int(sender.value).description 
     let userDefaults = UserDefaults.standard 
     userDefaults.setValue(MAXLabel.text, forKey: "data") 
     userDefaults.synchronize() 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Save value 
    if let Savings = UserDefaults.standard.value(forKey: Savings) { 
     Stepr1.value = Savings as! Double 
     stepperValueChanged(sender: Stepr1) 
    } 
} 

+0

Multiplizieren Sie es mit 100, verwenden Sie Boden oder Runde und dividieren Sie durch 100 wieder –

+2

Wenn Sie nur die Beschreibung abgerundet möchten können Sie NumberFormatter verwenden und den gewünschten Rundenmodus einstellen –

+0

@LeoDabus Wie kann ich das tun? Ich verstehe nicht wirklich in diesem – B2Fq

Antwort

2

können Sie String Interpolation verwenden im Format String:

let places = Int(Stepr1.value) 
displayResultLabel.text = String(format: "%.\(places)f", newValue) 

Hinweis: Diese . als Dezimaltrennzeichen immer noch verwendet, wenn das Gebietsschema , angibt des Benutzers. Verwenden Sie NumberFormatter, um locale zu berücksichtigen, wie von this answer gezeigt.

+2

Ist dieses Format korrekt auf der Gebietsschema des Benutzers basiert? – rmaddy

+0

@rmaddy, nein, es sei denn, Ihr Gebietsschema verwendet '.' als Trennzeichen. Die Antwort von LeoDabus in dem verknüpften [Duplikat] verwendet "NumberFormatter", was das Gebietsschema berücksichtigt. – vacawama

Verwandte Themen