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

Ios 使用Swift如何将字符串转换为数字,ios,swift,nsnumberformatter,Ios,Swift,Nsnumberformatter,我从一个web服务中获取值,该服务以字符串格式返回价格,这被放入字典中,因此我将价格返回为“1.5000”,例如,这显然是1.50的货币。然而,就我的一生而言,我无法在Swift中获得任何东西来正确格式化此文件。在大多数其他语言中,你可以在几秒钟内完成这项工作,所以我对这么简单的事情感到有点沮丧 以下是我的测试代码: var testnumber = "1.5000" let n = NSNumberFormatter() n.numberStyle = NSNumber

我从一个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)")
这是在“数字是可选的(1.5)”而不是1.50中打印出来的

我已经将NSNumberFormatterStyle.DecimalStyle更改为NSNumberFormatterStyle.CurrencyStyle,因为返回的数字是一种货币,所以我认为这可能对我有用,但这让我在调试中返回“返回的数字为零”-这对我来说更加困惑

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

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


我们将非常感激您的帮助。

您打印的是一个数字,而不是字符串

Xcode 11.4•Swift 5.2或更高版本

extension Formatter {
    static let usCurrency: NumberFormatter = {
        let formatter = NumberFormatter()
        formatter.locale = .init(identifier: "en_US")
        formatter.numberStyle = .currency
        return formatter
    }()
}



问题在于
numberFromString
返回一个可选值-因此您必须在打印前打开包装。为了安全起见,您可以使用可选绑定:

if let returnNumber = n.numberFromString(testnumber) {
    println("Returned number is \(returnNumber)")
}
否则,如果可选值为nil(在某些情况下,如果可选值始终包含非nil值,则这是所需的行为),则可以使用强制展开:

let returnNumber = n.numberFromString(testnumber)!
println("Returned number is \(returnNumber)")
修复不需要的
可选(xx)
文本。至于设置浮点数/双倍数的格式,可能有几种方法——我会使用类似c的字符串格式,可通过
NSString

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

如果您想了解更多关于格式说明符的信息,请将其用作参考。

您可能只需要使用刚刚创建的
NSNumberFormatter

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

returnNumber
现在将是
String

类型,以下是我在操场上返回的小数点后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))
} 

让returnNumber=n.numberFromString(testnumber)?.floatValue()怎么样?不,仍然返回1。5@Dave:1.5和1.50是完全相同的数字。我知道1.5和1.50是相同的数字,但需要为用户正确设置格式。谁见过给用户的价格是1.5美元而不是1.50美元。这就是我想做的。@Dave:好吧,在你的问题中,你说你想“…把字符串转换成浮点”,而1.5就是浮点。如果要将其表示为“$1.50”,则必须使用合适的数字格式化程序将浮点数转换回字符串。
let returnNumber = n.stringFromNumber(n.numberFromString(testnumber))
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))
}