NSNumberFormatter запутался в минусе?

Проверь это:

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

Таким образом, очевидно, что добавление знака минус к числу вполне допустимо, но знак плюс - нет. Это ожидаемое поведение, и так ли это, кто-нибудь знает почему?

2 ответа

Решение

Я не могу сказать, почему NSNumberFormatter не допускает знак "+", но тип Floift в Swift выглядит умнее:

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

Он не возвращает NSNumber, но я думаю, вы всегда можете набрать приведение / преобразование.

Проблема в том, что ни одна локаль не использует положительный префикс по умолчанию в своих средствах форматирования чисел.

Вы должны явно сказать своему 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")
Другие вопросы по тегам