格式化后从文本字段中获取双值

时间:2019-01-13 02:52:07

标签: ios swift

我想知道是否有人可以向我说明以下几点:我有一个文本字段,可以将自身格式化为货币格式(这样可以很好地为用户显示),例如$ 100,000,000.00。我需要将其作为双精度对象,我已经尝试了一些方法,并且我想出的最好的方法是转换为双精度对象,但是从上面的示例中获得了10.0,而不是完整的100000000.00。如果你们能帮助我,我将不胜感激!谢谢!

class MainScreen: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.hideKeyboard()

    moneySpentTextField.addTarget(self, action: #selector(moneySpentTextFieldDidChange), for: .editingChanged)
    moneySpentTextField.delegate = self
}

@objc func moneySpentTextFieldDidChange(_ textField: UITextField) {
    if let amountString = moneySpentTextField.text?.currencyInputFormatting() {
        moneySpentTextField.text = amountString
    }
}

extension String {

// formatting text for currency textField
func currencyInputFormatting() -> String {

    var number: NSNumber!

    let formatter = NumberFormatter()
    formatter.numberStyle = .currency
    formatter.locale = Locale.current

    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 "$0"
    }

    return formatter.string(from: number)!
}

1 个答案:

答案 0 :(得分:0)

var i = "$100,000,000.00"
var number: NSNumber!

let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale.current


// remove from String: "$", ".", ","
let regex = try! NSRegularExpression(pattern: "[^0-9]", options: .caseInsensitive)
var amountWithPrefix = regex.stringByReplacingMatches(in: i, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, i.count), withTemplate: "")

let double = (amountWithPrefix as NSString).doubleValue
number = NSNumber(value: (double / 100))

// if first number is 0 or all numbers were deleted
print(number)

输出:100000000

您的代码正确。