Swift – 带逗号分隔符的字符串加倍

Swift – String with comma-separator to double

我目前有这样一个字符串:"8,0""4,25",我需要将其转换为 Double,但我该怎么做呢? 我是否先将 , 替换为 .

我查看了 NSNumberFormatter,但每个字符串都返回了 nil

let formatter = NSNumberFormatter()
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
let grade = formatter.numberFromString(grade["Cijfer"].stringValue)
print(grade)

我应该使用什么?

使用decimalSeparator:

let formatter = NSNumberFormatter()
formatter.decimalSeparator = ","
let grade = formatter.numberFromString("2,3")

if let doubleGrade = grade?.doubleValue {
    print(doubleGrade)
} else {
    print("not parseable")
}

版画

2.3

'pure'Swift(无基金会)

let str = "9,8"
let sstr = str.characters.split(",").joinWithSeparator(["."])
if let d = Double(String(sstr)) {
    print(d) // 9.8
}

强大的字符串扩展

extension String {
    var preparedToDecimalNumberConversion: String {
        split {
            !CharacterSet(charactersIn: "\([=10=])").isSubset(of: CharacterSet.decimalDigits)
        }.joined(separator: ".")
    }
}

func testPreparingToDecimalNumberConversion() {
    XCTAssertEqual("25.5".preparedToDecimalNumberConversion, "25.5")
    XCTAssertEqual("25,5".preparedToDecimalNumberConversion, "25.5")
    XCTAssertEqual("...,,,25,5,,,".preparedToDecimalNumberConversion, "25.5")
    XCTAssertEqual("25.5,42,..".preparedToDecimalNumberConversion, "25.5.42")
    XCTAssertEqual(".42,..".preparedToDecimalNumberConversion, "42")
    XCTAssertEqual(".36,,,6,..".preparedToDecimalNumberConversion, "36.6")
    XCTAssertEqual("36......6".preparedToDecimalNumberConversion, "36.6")
    XCTAssertEqual("36.,.,.,6".preparedToDecimalNumberConversion, "36.6")

    XCTAssertEqual(Float("25.5".preparedToDecimalNumberConversion), 25.5)
    XCTAssertEqual(Float("25,5".preparedToDecimalNumberConversion), 25.5)
    XCTAssertEqual(Float("...,,,25,5,,,".preparedToDecimalNumberConversion), 25.5)
    XCTAssertEqual(Float("25.5,42,..".preparedToDecimalNumberConversion), nil)
    XCTAssertEqual(Float(".42,..".preparedToDecimalNumberConversion), 42)
}