将小数舍入到用户指定的位数
Rounding decimals to a user-specified number of places
我有一段计算器代码。
并且设置里面有步进器
我怎样才能做到当用户在 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)
}
}
您可以使用 String Interpolation 格式 String:
let places = Int(Stepr1.value)
displayResultLabel.text = String(format: "%.\(places)f", newValue)
注意:这将始终使用 .
作为小数点分隔符,即使用户的区域设置指定 ,
也是如此。使用 NumberFormatter
将 locale
考虑在内,如 this answer 所示。
我有一段计算器代码。
并且设置里面有步进器
我怎样才能做到当用户在 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)
}
}
您可以使用 String Interpolation 格式 String:
let places = Int(Stepr1.value)
displayResultLabel.text = String(format: "%.\(places)f", newValue)
注意:这将始终使用 .
作为小数点分隔符,即使用户的区域设置指定 ,
也是如此。使用 NumberFormatter
将 locale
考虑在内,如 this answer 所示。