用 TextField 中的小数分隔符替换逗号

Posted

技术标签:

【中文标题】用 TextField 中的小数分隔符替换逗号【英文标题】:Replace comma with decimal separator from TextField 【发布时间】:2017-10-14 06:49:07 【问题描述】:

谁能告诉我如何在我的文本字段中用. 替换, 分隔符?用户可以输入5,6 之类的内容,但是当他按下按钮时,我想将他输入为5,6 的数据提交给5.6,否则不会进行十进制计算。

我有这个扩展字符串文件,但似乎仅用于限制文本中的一个逗号和逗号后的两个小数,而不是将, 转换为.

extension String 

private static let decimalFormatter:NumberFormatter = 
    let formatter = NumberFormatter()
    formatter.allowsFloats = true
    return formatter
()

private var decimalSeparator:String
    return String.decimalFormatter.decimalSeparator ?? "."



func isValidDecimal(maximumFractionDigits:Int)->Bool

    guard self.isEmpty == false else 
        return true
    

    // Check if valid decimal
    if let _ = String.decimalFormatter.number(from: self)

        // Get fraction digits part using separator
        let numberComponents = self.components(separatedBy: decimalSeparator)
        let fractionDigits = numberComponents.count == 2 ? numberComponents.last ?? "" : ""
        return fractionDigits.characters.count <= maximumFractionDigits
    

    return false


var doubleValue: Double 
    let nf = NumberFormatter()
    nf.decimalSeparator = "."
    if let result = nf.number(from: self) 
        return result.doubleValue
     else 
        nf.decimalSeparator = ","
        if let result = nf.number(from: self) 
            return result.doubleValue
        
    
    return 0


【问题讨论】:

【参考方案1】:

当你点击按钮时,写下面的代码来替换你的字符串

let strReplace = txtField.text.replacingOccurrences(of: ",", with: ".", options: .literal, range: nil)// change "txtField" your textfield's object
print(\(strReplace))

【讨论】:

【参考方案2】:

你应该为 uitextfield 添加 Delegate 方法

class ViewController: UIViewController, UITextFieldDelegate

然后在viewdidload中添加self

 override func viewDidLoad() 
    super.viewDidLoad()
    textField.delegate = self;
    // Do any additional setup after loading the view, typically from a nib.

然后在可以更改字符的函数中添加以下函数

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) 

 print("While entering the characters this method gets called")
 let strReplace = txtField.text.replacingOccurrences(of: ",", with: ".", options: .literal, range: nil)
// change "txtField" your textfield's object
 print(\(strReplace))


现在您可以获得替换字符串以及当前的文本字段文本。!

【讨论】:

以上是关于用 TextField 中的小数分隔符替换逗号的主要内容,如果未能解决你的问题,请参考以下文章

以逗号作为小数分隔符的数据框

如果是葡萄牙语,如何在 EditText 中用点替换逗号

NumericUpDown:接受逗号和点作为小数分隔符

用逗号作为小数分隔符解析双精度

用逗号作为小数分隔符的数字的 Google 表单正则表达式

用逗号作为小数分隔符解析Double的最佳方法?