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)
}
我目前有这样一个字符串:"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)
}