2017-03-24 44 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