在Apple的Swift中将String转换为float

 道义信_686 发布于 2023-01-11 12:10

我试图转换从UITextField获取的数字,我认为它实际上是字符串,并将它们转换为float,所以我可以将它们相乘.

我有两个UITextfields声明如下:

@IBOutlet var wage: UITextField
@IBOutlet var hour: UITextField

当用户按下UIButton我想计算用户赚取的工资,但我不能,因为我需要先将它们转换为浮点数,然后再使用它们.

我知道如何通过这样做将它们转换为整数:

var wageConversion:Int = 0
wageConversion = wage.text.toInt()!

但是,我不知道如何将它们转换为浮点数.

6 个回答
  • 因为在世界的某些地方,例如,使用逗号而不是小数.最好创建一个NSNumberFormatter来将字符串转换为float.

    let numberFormatter = NSNumberFormatter()
    numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
    let number = numberFormatter.numberFromString(self.stringByTrimmingCharactersInSet(Wage.text))
    

    2023-01-11 12:12 回答
  • Swift 2.0+

    现在使用Swift 2.0,您可以使用Float(Wage.text)返回Float?类型.比刚刚返回的下面的解决方案更清楚0.

    如果由于某种原因0需要无效值,则Float可以使用Float(Wage.text) ?? 0,0如果无效,则返回该值Float.


    旧解决方案

    处理此问题的最佳方法是直接投射:

    var WageConversion = (Wage.text as NSString).floatValue
    

    我实际创建了一个extension更好地使用它:

    extension String {
        var floatValue: Float {
            return (self as NSString).floatValue
        }
    }
    

    现在您可以调用var WageConversion = Wage.text.floatValue并允许扩展程序为您处理桥接!

    这是一个很好的实现,因为它可以处理实际的浮点数(输入.),也有助于防止用户将文本复制到输入字段(12p.34甚至甚至12.12.41).

    显然,如果Apple确实floatValue向Swift 添加了一个,那么会抛出异常,但同时它可能会很好.如果他们稍后添加它,那么修改代码所需要做的就是删除扩展,一切都将无缝地工作,因为你已经在调用了.floatValue!

    此外,变量和常量应以小写字母开头(包括IBOutlets)

    2023-01-11 12:12 回答
  • 更新

    接受的答案显示了更新的做法

    斯威夫特1

    这就是Paul Hegarty在2015年斯坦福大学CS193p课程中的表现:

    wageConversion = NSNumberFormatter().numberFromString(wage.text!)!.floatValue
    

    您甚至可以创建一个计算属性,而不必每次都这样做

    var wageValue: Float {
            get {
                return NSNumberFormatter().numberFromString(wage.text!)!.floatValue
            }
            set {
                wage.text = "\(newValue)"
            }
        }
    

    2023-01-11 12:13 回答
  • 使用接受的解决方案,我发现我的"1.1"(当使用.floatValue转换时)将转换为1.10000002384186,这不是我想要的.但是,如果我使用.doubleValue代替,我会得到我想要的1.1.

    因此,例如,我使用的不是使用已接受的解决方案:

    var WageConversion = (Wage.text as NSString).doubleValue
    

    在我的情况下,我不需要双精度,但使用.floatValue并没有给我正确的结果.

    只是想将其添加到讨论中以防其他人遇到同样的问题.

    2023-01-11 12:13 回答
  • 下面会给你一个可选的Float,坚持一个!最后如果你知道它是Float,或者使用if/let.

    let wageConversion = Float(wage.text)
    

    2023-01-11 12:13 回答
  • 我以这种方式将String转换为Float:

    let numberFormatter = NSNumberFormatter()
    let number = numberFormatter.numberFromString("15.5")
    let numberFloatValue = number.floatValue
    
    println("number is \(numberFloatValue)") // prints "number is 15.5"
    

    2023-01-11 12:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有