Swift: 如何去掉NSNumberFormatter 的.00?

Swift: How to remove the .00 of NSNumberFormatter?

有人帮我制作了显示逗号和 $ 的文本字段,但是每当数字后面总是有 .00 时,即使我删除了文本字段中的所有内容。如果有人只输入整数或什么都不输入,如何删除它?非常感谢!

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let oldText = textField.text! as NSString
    var newText = oldText.stringByReplacingCharactersInRange(range, withString: string) as NSString!
    var newTextString = String(newText)

    let digits = NSCharacterSet.decimalDigitCharacterSet()
    var digitText = ""
    for c in newTextString.unicodeScalars {
        if digits.longCharacterIsMember(c.value) {
            digitText.append(c)
        }
    }

    let formatter = NSNumberFormatter()
    //        formatter.usesSignificantDigits = false
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    formatter.locale = NSLocale(localeIdentifier: "en_US")
    let numberFromField = (NSString(string: digitText).doubleValue) / 100

    newText = formatter.stringFromNumber(numberFromField)

    textField.text = String(newText)

    return false

}

设置 NSNumberFormatter() 的 minimumFractionDigits 和 maximumFractionDigits::

formatter.minimumFractionDigits = 1
formatter.maximumFractionDigits = 1

试试这个,

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {


    let oldText = textField.text! as NSString
    var newText = oldText.stringByReplacingCharactersInRange(range, withString: string) as NSString!
    var newTextString = String(newText)

    let digits = NSCharacterSet.decimalDigitCharacterSet()
    var digitText = ""
    for c in newTextString.unicodeScalars {
        if digits.longCharacterIsMember(c.value) {
            digitText.append(c)
        }
    }

    let formatter = NSNumberFormatter()
    //        formatter.usesSignificantDigits = false
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    formatter.locale = NSLocale(localeIdentifier: "en_US")
    let numberFromField = (NSString(string: digitText).doubleValue) / 100

    newText = formatter.stringFromNumber(numberFromField)

    if newText .isEqualToString("[=10=].00") {

        newText = ""

    }

    textField.text = String(newText)

    return false

}

我刚刚添加,

  if newText .isEqualToString("[=11=].00") {

        newText = ""

    }

用你的方法。

更新:(如评论中所述)

用下面的方法替换你的方法很简单,

   func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {


    let oldText = textField.text! as NSString
    var newText = oldText.stringByReplacingCharactersInRange(range, withString: string) as NSString!
    var newTextString = String(newText)

    let digits = NSCharacterSet.decimalDigitCharacterSet()
    var digitText = ""
    for c in newTextString.unicodeScalars {
        if digits.longCharacterIsMember(c.value) {
            digitText.append(c)
        }
    }

  //  let formatter = NSNumberFormatter()
    //        formatter.usesSignificantDigits = false
  //  formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
  //  formatter.locale = NSLocale(localeIdentifier: "en_US")

    let numberFromField = (NSString(string: digitText).intValue)



    newText = NSString.localizedStringWithFormat("$%d", numberFromField)

 //        if newText .isEqualToString("[=12=].00") {
//            
//            newText = ""
//        
//        }

    textField.text = String(newText)

    return false

}