将小数舍入到用户指定的位数

时间:2017-11-22 17:58:54

标签: ios swift rounding number-formatting

我的计算器有一段代码。

设置中有一个步进器。

如何使用当按下步进器2时,计算器中的答案将四舍五入到小数点后的2个数字?

现在小数点后面有一个最多9个数字。

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)
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用格式为String:

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

注意:即使用户的区域设置指定.,也始终使用,作为小数点分隔符。使用NumberFormatterlocale考虑在内,如this answer所示。