Swift - 如何将字符串转换为双精度

发布于 2022-05-26 23:09:47

我正在尝试用 swift 语言编写一个 BMI 程序。我遇到了这个问题:如何将 String 转换为 Double?

在 Objective-C 中,我可以这样做:

double myDouble = [myString doubleValue];

但是我怎样才能在 Swift 语言中实现这一点呢?

关注者
0
被浏览
11
1 个回答
  • 面试哥
    面试哥 2022-05-26
    为面试而生,有面试问题,就找面试哥。

    Swift 4.2+ String to Double

    您应该使用新的类型初始化器在 String 和数字类型(Double、Float、Int)之间进行转换。它将返回一个 Optional
    类型(Double?),如果 String 不是数字,它将具有正确的值或 nil。

    注意: 不推荐使用 NSString doubleValue 属性,因为如果值无法转换(即:错误的用户输入),它会返回 0。

    let lessPrecisePI = Float("3.14")
    
    let morePrecisePI = Double("3.1415926536")
    let invalidNumber = Float("alphabet") // nil, not a valid number
    

    使用 if/let 解包值以使用它们

    if let cost = Double(textField.text!) {
        print("The user entered a value price of \(cost)")
    } else {
        print("Not a valid number: \(textField.text!)")
    }
    

    NumberFormatter您可以使用该类转换格式化的数字和货币。

    let formatter = NumberFormatter()
    formatter.locale = Locale.current // USA: Locale(identifier: "en_US")
    formatter.numberStyle = .decimal
    let number = formatter.number(from: "9,999.99")
    

    货币格式

    let usLocale = Locale(identifier: "en_US")
    let frenchLocale = Locale(identifier: "fr_FR")
    let germanLocale = Locale(identifier: "de_DE")
    let englishUKLocale = Locale(identifier: "en_GB") // United Kingdom
    formatter.numberStyle = .currency
    
    formatter.locale = usLocale
    let usCurrency = formatter.number(from: "$9,999.99")
    
    formatter.locale = frenchLocale
    let frenchCurrency = formatter.number(from: "9999,99€")
    // Note: "9 999,99€" fails with grouping separator
    // Note: "9999,99 €" fails with a space before the €
    
    formatter.locale = germanLocale
    let germanCurrency = formatter.number(from: "9999,99€")
    // Note: "9.999,99€" fails with grouping separator
    
    formatter.locale = englishUKLocale
    let englishUKCurrency = formatter.number(from: "£9,999.99")
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看