2017-03-24 103 views
0

在我的视图控制器中传递小数我有一个uitextfield,用户可以通过按下添加按钮来输入一些费用的小数。 问题:如果像我输入INT“100”一切正常,但如果我输入“12.3”的数据是不是即使我转换文本在双 注接受:如果我输入小数,“打印1" 的价值观和停止,就像没有数据集 注2:在我的文本字段我设置为无校正和拼写检查由于对文本框的键盘xcodebug,但这种变化似乎并不影响本问题swift 3.1无法从UITextField

我声明:

var amount : Double! 

我的按钮:

@IBAction func addBillButton(_ sender: UIButton) { 

    print("button pressed 1") 

    guard self.dataInput.text != nil else {return} 
    amount = Double(self.dataInput.text!) 
    guard amount != nil else {return} 
    print("amount  : \(amount!)") 


    dateShowed = myDatePicker.date as NSDate! 
    let dateShowedString = convertDateToString(dateToConvert: dateShowed as NSDate) 
    print("date   : \(dateShowedString)") 


    if presentPickName != nil { 
     print("name is : \(presentPickName!)") 
    } else { 
     print("presentPickName is nil") 
    } 


    //  guard presentPickData != nil else {return} 
    if presentPickTag != nil { 
     print("tag is  : \(presentPickTag!)") 
    } else { 
     print("presentPickData is nil") 
    } 

    //func for saving in core data 
//  saveExpense(amountToSave: amount, amountDate: dateShowed as NSDate, owner: presentPickName, tag: presentPickTag) 

    resetViewForNextInput() 

    self.dataInput.resignFirstResponder() 


    print("button pressed 2") 

} 

我的文本框在故事板

enter image description here

编辑解决方案:

在我的按钮

guard let stringFromTxtField = self.dataInput.text else {return} 
    print(stringFromTxtField) 
    let myFormatter = NumberFormatter().number(from: stringFromTxtField) as! Double 
    print(myFormatter) 
    amount = myFormatter 

回答

0

这取决于区域设置,直接从文本传递到数量,反之亦然应该总是做通过使用NumberFormatter。数字格式化程序知道设置中设置的区域设置并正确地转换您的数字。
比如在意大利的小数位都将显示一个,,意大利用户发现自然这样的1,5或54,2迅速Double打印输入小数像这样1.5 54.2因为编程语言,需要与美国的数字格式。
因此,Double无法解析字符串,因为它期望这种格式的数字。
使用NumberFormatter可以从文本到正确的号码数通过,因为它的语言环境,在意大利小数点分隔符为,知道。
课程号格式化拥有大量的选项,迫使区域,迫使小数点分隔符等

let double = NumberFormatter().number(from: "1,3") as! Double 

这行代码设置为意大利的区域设置将正确得到一个数字的1.3

+0

大说明!但我应该如何在我的代码中实现它? – biggreentree

+0

@biggreentree正如我写的那样使用NumberFormatter – Andrea

+0

我不是那个专家,我在我的更新中添加了一个可能的解决方案,你能检查我是错的吗? – biggreentree