【发布时间】:2021-01-05 18:09:26
【问题描述】:
我是 Swift 新手,请耐心等待。 :)
我无法将输出货币显示到小数点后两位。目前,它只显示一位小数。例如,如果我输入 $1.10,则输出为 $1.1。
但是,如果我输入 $1.11,输出仍然是 $1.11。
func currencyInputDoubling() -> String {
var number: NSNumber!
let formatter = NumberFormatter()
formatter.numberStyle = .currencyAccounting
formatter.currencySymbol = CurrencyManager.shared.currentCurrency.sign
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
var amountWithPrefix = self
// remove from String: "$", ".", ","
let regex = try! NSRegularExpression(pattern: "[^0-9]", options: .caseInsensitive)
amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.count), withTemplate: "")
let double = (amountWithPrefix as NSString).doubleValue
number = NSNumber(value: (double / 100))
// if first number is 0 or all numbers were deleted
guard number != 0 as NSNumber else {
return ""
}
return "\(double / 100)"
}
【问题讨论】:
-
你想用这个方法完成什么?
-
@JoakimDanielson - 这可能是为了实时格式化文本字段中的货币值。例如。用户键入“123456”,文本字段显示“$1,234.56”。如果用户继续输入,例如最后输入“7”,结果将是“$12,345.67”。这是格式化数据输入的常见模式。 (它显然忽略了文本位置问题,但却是一种常见的幼稚实现。)
标签: swift currency nsnumber numberformatter