首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIFT3.1不能从UITextField传递小数

SWIFT3.1不能从UITextField传递小数
EN

Stack Overflow用户
提问于 2017-03-24 10:02:30
回答 1查看 406关注 0票数 0

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

我宣布:

代码语言:javascript
复制
var amount : Double!

我的按钮:

代码语言:javascript
复制
@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")

 }

我在故事板中的文本字段

编辑解决方案:

在我的扣子里

代码语言:javascript
复制
    guard let stringFromTxtField = self.dataInput.text else {return}
    print(stringFromTxtField)
    let myFormatter = NumberFormatter().number(from: stringFromTxtField) as! Double
    print(myFormatter)
    amount = myFormatter
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-24 10:24:41

这取决于区域设置,直接从文本传递到数字,反之亦然,应该始终使用NumberFormatter。数字格式化程序知道设置中的区域设置,并正确地转换您的编号。

例如,在意大利,小数位是用,显示的,意大利用户发现输入像这1,5或54,2这样的数字是很自然的,因为编程语言需要使用美国格式的数字。

因此,Double无法解析字符串,因为它需要这种格式的数字。

使用NumberFormatter,您可以将文本传递给正确的数字,因为它从区域设置中知道,意大利的十进制分隔符是,

当然,数字格式化程序有很多选项,强制区域设置,强制十进制分隔符等等。

代码语言:javascript
复制
let double = NumberFormatter().number(from: "1,3") as! Double

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42996473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档