我想删除VisualVM
中的特殊字符,
,以便将值转换为string
。我该怎么做?
示例:
double
我尝试使用let stringValue = "4,000.50";
,但收到NumberFormatter
错误
nil
答案 0 :(得分:3)
如果数字字符串将始终从特定区域设置格式化,那么您需要设置格式化程序的区域设置以匹配。如果不设置区域设置,如果用户的区域设置使用不同的分组和小数格式,则不会解析字符串。
let stringValue = "4,000.50"
let nf = NumberFormatter()
nf.numberStyle = .decimal
nf.locale = Locale(identifier: "en_US")
let value = nf.number(from: stringValue)
仅供参考 - 这是Swift,你不需要在行尾添加分号。
答案 1 :(得分:1)
与@rmaddy相同,但使用字符串replacingOccurrences
:
var stringValue = "4,000,000.50"
stringValue = stringValue.replacingOccurrences(of: ",", with: "")
let nf = NumberFormatter()
let value = nf.number(from: stringValue)
print(value)
答案 2 :(得分:1)
如果您知道自己正在使用货币,则可以通过利用连续数字的模式来清理任何小数和千位分隔符的文本值。如果有任何小数,它们将是最后一组,并且将具有正好两位数(对于大多数货币)。在此假设的基础上,您不需要知道使用了哪个分隔符,并且您还可以适应其他字符的存在,例如货币名称或符号:
let textValue = "Balance : 1 200,33 Euros"
let nonDigits = CharacterSet(charactersIn: "01234456789").inverted
let digitGroups = textValue.components(separatedBy:nonDigits).filter{!$0.isEmpty}
let textNumber = digitGroups.dropLast().joined(separator:"")
+ ( digitGroups.last!.characters.count == 2
&& digitGroups.count > 1 ? "." : "" )
+ digitGroups.last!
textNumber // 1200.33
答案 3 :(得分:0)
如果你只想要一个只有数字和小数的消毒字符串,那么在Xcode 9.0+中你可以这样做:
let originalString = "4,000.00"
let numberString = originalString.filter({ "1234567890.".contains($0) })
// numberString -> "4000.00"
然后,将已清理的字符串转换为Float
就像
if let num = Float(numberString) {
// do something with float
} else {
// failed to init float with string
}