我想用swift语言写一个BMI程序.

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

double myDouble = [myString doubleValue];

但我怎样才能用迅捷的语言做到这一点呢?

推荐答案

Swift 4.2+ String to Double

应该使用新的类型初始值设定项在字符串和数字类型(双精度、浮点、Int)之间进行转换.它将返回一个可选类型(Double?)如果字符串不是数字,则将具有正确的值或nil.

Note:不建议使用NSString doubleValue属性,因为如果无法转换该值(即:用户输入错误),它将返回0.

let lessPrecisePI = Float("3.14")

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

Unwrap the values to use them using 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")

Currency formats

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")

阅读更多关于我的blog post about converting String to Double types (and currency).

Swift相关问答推荐

对多个项目的数组进行排序

显示第二个操作紧接在另一个操作后的工作表在SwiftUI中不起作用

在按下按钮动画后执行按钮动作

SwiftUI-如何使用剩余时间制作倒计时计时器

如何使用Duration.TimeFormatStyle以h m s格式快速格式化时间

如何使用可搜索在搜索栏中搜索包括>或<?

如何删除快速处理消息

子视图未在父视图 SwiftUI 中触发禁用状态更新

Swiftui 无法从核心数据中获取数据

从文字创建数组时的 Swift 宏

VStack SwiftUI 中的动态内容高度

无法使用锚激活约束

SwiftUI 中的 .primary 和 .secondary colored颜色 是什么?

更新我的 pod 导致 GoogleDataTransport Umbrella 标头出现错误

Swift 4 Decodable - 以枚举为键的字典

CMutablePointer - 如何访问它?

在 Swift 中,你可以用另一个字符串分割一个字符串,而不仅仅是一个字符吗?

Swift if 语句 - 多个条件用逗号分隔?

使用 Swift 以编程方式自定义 UITableViewCell

如何使用 swift 在 tableview 中填充两个不同数组的两个部分?