NSNumberFormatter 对减号感到困惑?

NSNumberFormatter confused about minus?

看看这个:

(lldb) po NSNumberFormatter().numberFromString("+10.6")
nil
(lldb) po NSNumberFormatter().numberFromString("10.6")
▿ Optional(10.6)
(lldb) po NSNumberFormatter().numberFromString("-10.6")
▿ Optional(-10.6)

显然,在数字上加上减号是完全有效的,但加号则不然。这是预期的行为,确实如此,有人知道为什么吗?

The problem is that no locale uses a positive prefix by default in their number formatters.

您需要明确告诉您的 NSNumberFormatter 实例要做什么。

这适用于 Xcode 游乐场:

import Foundation

// this outputs "nil"
let bustedNnumber = NSNumberFormatter().numberFromString("+10.6")

// this outputs "-10.6"
let minusnumber = NSNumberFormatter().numberFromString("-10.6")

let nf = NSNumberFormatter()
nf.numberStyle = .DecimalStyle
nf.positivePrefix = "+"

// this outputs "10.6"
let positiveNumber = nf.numberFromString("+10.6")

我不能说为什么 NSNumberFormatter 不能容忍“+”符号,但是 Swift 的 Float 类型似乎更聪明:

 Float("10.6")    --> 10.6
 Float("+10.6")   --> 10.6
 Float("-10.6")   --> -10.6
 Float("Garbage") --> nil

它不是 return NSNumber,但我猜你总是可以输入 cast/convert 它。