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
}
有人帮我制作了显示逗号和 $ 的文本字段,但是每当数字后面总是有 .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
}