在“我的视图控制器”中,我有一个uitextfield,用户可以通过按add按钮输入小数以支付一定的开销。问题:如果我输入Int (如"100“)一切正常,但如果我输入"12,3”数据,即使我用双注方式转换文本,也不接受:如果我输入十进制、“打印1”值和停止,就像没有数据被设置为note2:在我的文本字段中,由于对文本字段键盘的xcodebug,我设置为不进行更正和拼写检查,但这种更改似乎不会影响当前的问题。
我宣布:
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")
}我在故事板中的文本字段

编辑解决方案:
在我的扣子里
guard let stringFromTxtField = self.dataInput.text else {return}
print(stringFromTxtField)
let myFormatter = NumberFormatter().number(from: stringFromTxtField) as! Double
print(myFormatter)
amount = myFormatter发布于 2017-03-24 10:24:41
这取决于区域设置,直接从文本传递到数字,反之亦然,应该始终使用NumberFormatter。数字格式化程序知道设置中的区域设置,并正确地转换您的编号。
例如,在意大利,小数位是用,显示的,意大利用户发现输入像这1,5或54,2这样的数字是很自然的,因为编程语言需要使用美国格式的数字。
因此,Double无法解析字符串,因为它需要这种格式的数字。
使用NumberFormatter,您可以将文本传递给正确的数字,因为它从区域设置中知道,意大利的十进制分隔符是,。
当然,数字格式化程序有很多选项,强制区域设置,强制十进制分隔符等等。
let double = NumberFormatter().number(from: "1,3") as! Double将区域设置为意大利的这一行代码将正确地得到1.3
https://stackoverflow.com/questions/42996473
复制相似问题