[英]IOS SWIFT 4 convert String to Decimal with Locale
在IOS SWIFT 4中,我尝试根据给定的String for Money计算创建一个小数 ,考虑到当前语言环境 (主要考虑小数分隔符和分组分隔符)
只是尝试将Decimal初始化与Locale,BUT结合使用,如该链接中所述,如果字符串包含非数字字符,则它只会读取该字符,而不是提供nil 。 所以我不知道字符串是否已成功转换为Decimal或已部分考虑。 例如,在以下情况下,如果数字字符串(stringValue)具有分组分隔符,它将一直读取直到该字符(逗号)为止。 所以下面的代码提供答案为1。
let stringValue: String = "1,200.00"
let decValue: Decimal = Decimal(string: stringValue, locale: Locale(identifier: "en_GB")) // ANSWER - 1
这就是十进制初始化的问题。 我可以使用NumberFormatter解决以下分组分隔符问题,但转换后的NSNumber中的 decimalValue属性提供了错误的值。
let stringValue: String = "8.20"
let nf = NumberFormatter()
nf.locale = Locale(identifier: "en_GB")
nf.usesGroupingSeparator = true
nf.numberStyle = NumberFormatter.Style.decimal
if let number = nf.number(from: stringValue)
{
let decValue: Decimal = number.decimalValue // ANSWER: 8.199999999999999
}
我已经看到很多地方都在讨论这个问题,但是还没有一个完全解决的答案。 想知道考虑语言环境将给定String值转换为Decimal数的最佳方法是什么。 (如果德语/法语-组分隔符为“。”,十进制分隔符为“,”等)
尝试这个 :
let stringValue: String = "8.20"
let loc = Locale(identifier: "en_GB")
let nf = NumberFormatter()
nf.locale = loc
nf.usesGroupingSeparator = true
nf.numberStyle = .decimal
var decValue: Decimal? = nil
if let _ = nf.number(from: stringValue) {
var copy = stringValue
if let sep = loc.groupingSeparator {
copy = copy.split(separator: Character(sep)).joined()
}
decValue = Decimal(string: copy, locale: loc)
}
您可以通过以下方式检查结果:
decValue.map { print($0) } //8.2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.