使用Swift如何将字符串转换为数字

时间:2015-01-16 19:43:37

标签: ios swift nsnumberformatter

我从一个Web服务中获取值,这个值以字符串格式返回价格,这被放入一个字典中,所以我将价格恢复为“1.5000”,例如货币明显为1.50。然而,对于我的生活,我无法在Swift中工作以正确格式化。在大多数其他语言中,您可以在几秒钟内完成此操作,因此我对这么简单的事情感到有点沮丧。

这是我的测试代码:

    var testnumber = "1.5000"
    let n = NSNumberFormatter()
    n.numberStyle = NSNumberFormatterStyle.DecimalStyle
    n.maximumFractionDigits = 2
    n.minimumFractionDigits = 2
    let returnNumber = n.numberFromString(testnumber)
    println("Returned number is \(returnNumber)")

这打印出调试“number is Optional(1.5)”而不是1.50!

我已经将NSNumberFormatterStyle.DecimalStyle更改为NSNumberFormatterStyle.CurrencyStyle,因为我认为这可以为我做,因为返回的数字无论如何都是货币,但这让我回到调试“返回的数字是零” - 这更令人困惑对我来说!

我尝试过使用maximumIntegerDigits和minimumIntegerDigits,使用n.locale = NSLocale.currentLocale()设置区域设置,设置formatWidth,设置paddingPosition和paddingCharacter但没有任何帮助,我要么返回1.5。

我最终需要做的就是将字符串转换为浮点数或货币值,并确保有2个小数位,我不敢相信这很难实现!

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:7)

您正在打印的数字不是字符串

Xcode 9•Swift 4

extension String {
    var twoFractionDigits: String {
        let styler = NumberFormatter()
        styler.minimumFractionDigits = 2
        styler.maximumFractionDigits = 2
        styler.numberStyle = .currency
        let converter = NumberFormatter()
        converter.decimalSeparator = "."
        if let result = converter.number(from: self) {
            return styler.string(for: result) ?? ""
        }
        return ""
    }
}

"1.1222".twoFractionDigits           // "$1.12"
"2".twoFractionDigits                // "$2.00"

答案 1 :(得分:1)

问题是关于numberFromString返回一个可选项 - 所以你必须在打印之前解包。为了安全起见,您可以使用可选绑定:

if let returnNumber = n.numberFromString(testnumber) {
    println("Returned number is \(returnNumber)")
}

否则如果应用程序崩溃,如果可选项为nil(在某些情况下,如果期望可选项始终包含非零值,则这是一个想要的行为),只需使用强制解包:

let returnNumber = n.numberFromString(testnumber)!
println("Returned number is \(returnNumber)")

修复了不需要的"Optional(xx)"文字。至于格式化浮点数/双数,可能有几种方法 - 我将使用的是类似c的字符串格式,可通过NSString获得:

let formattedNumber = NSString(format: "%.2f", returnNumber)
println("Returned number is \(formattedNumber)")

如果您想了解有关格式说明符的更多信息,请使用String Format Specifiers作为参考。

答案 2 :(得分:0)

您可以使用刚创建的NSNumberFormatter

let returnNumber = n.stringFromNumber(n.numberFromString(testnumber))

returnNumber现在属于String类型。

答案 3 :(得分:0)

以下为我在游乐场返回2位小数。对你有所帮助。使用NSNumberFormatter,然后解包可选的

let testnumber: String = "1.50000"
let numberFormatter = NSNumberFormatter()
let number  = numberFormatter.numberFromString(testnumber)
if let final = number?.floatValue {
    println("Returned number is " + String(format: "%.2f", final))
} 
相关问题