Ios 尝试将dic值转换为货币值时出现问题
我有一本字典,可以随意选择账单价格 我的问题是,我想使用以下功能将其转换为货币:Ios 尝试将dic值转换为货币值时出现问题,ios,swift,currency,nsnumber,numberformatter,Ios,Swift,Currency,Nsnumber,Numberformatter,我有一本字典,可以随意选择账单价格 我的问题是,我想使用以下功能将其转换为货币: let currencyFormatter = NumberFormatter() currencyFormatter.usesGroupingSeparator = true currencyFormatter.numberStyle = .currency currencyFormatter.locale = Locale.current let priceString = currencyFormatter.
let currencyFormatter = NumberFormatter()
currencyFormatter.usesGroupingSeparator = true
currencyFormatter.numberStyle = .currency
currencyFormatter.locale = Locale.current
let priceString = currencyFormatter.string(from: ToConvert2)
print(priceString) // Displays $9,999.99 in the US locale
Im使用以下数据:
dicType.value(forKey:“BON\u PRIX”)
-->可选-部分:103.28
我试过:
let ToConvert = (String(describing: dicType.value(forKey: "BON_PRIX") as! String))
let ToConvert2 = NSNumber(value: Int(ToConvert)!)
但我犯了致命的错误
在展开可选值时意外发现nil
我尝试了几件事,但没有找到正确的方法。
因此,关键是将外部服务器的数据转换为EUR,并使用2位小数进行汇总
提前感谢您的帮助 您实际上不需要
NSNumber
:
func getEuro(strVal: String) -> String? {
let doubleStr = Double(strVal)
let price = doubleStr as? NSNumber
print(price)
let formatter = NumberFormatter()
formatter.numberStyle = .currency
// Changing locale to "es_ES" for Spanish Locale to get Euro currency format.
formatter.locale = Locale(identifier: "es_ES")
if let price = price {
let euroPrice = formatter.string(from: price)
print(euroPrice!) //"103,28 €"
return euroPrice
}
return nil
}
print(getEuro(strVal: "103.28")) //Optional("103,28 €")
let value = dicType["BON_PRIX"] as? String
// safely convert String to Double
let roundedDoubleValue = value.flatMap { Double($0) }
// use .string(for:) instead of .string(from:)
let priceString = currencyFormatter.string(for: roundedDoubleValue }) ?? ""
目前还不清楚哪条线路正在崩溃<代码>让ToConvert=…或
让ToConvert2=…
?它可以改变一切。另外,如果是第二个,那么什么是转换?另外,为什么要使用值(forKey:)
?为什么要强制石膏?为什么变量名要大写?问题是dicType.value(forKey:“BON_PRIX”)
是nil,所以在尝试打开它时失败(!)。如果让value=dicType.value(forKey:“BON_PRIX”),您应该执行类似于的操作?double{let ToConvert2=NSNumber(value:value)}
这将防止出现错误。你好,Larme,ToConvert2崩溃了。是否确定键BON\u PRIX
的值为String
?它似乎是双重的。而且你误用了值(forKey
和字符串(描述),甚至从带小数点的双精度创建了Int
。是的,BON\u Prix是字符串,而让ToConvert=Float(字符串(描述:dicType.value(forKey:“BON\u Prix”)是!字符串))!
I return 103.28,问题是let priceString=currencyFormatter.string(from:ToConvert as!NSNumber)需要NSNumber
谢谢您的解决方案,但我想使用允许我进行取整和货币转换的功能。为什么您要将语言环境设置为es_es
?es_es用于西班牙语语言环境,该语言环境有欧元currency@Amyth为什么要更改区域设置,从而更改整个格式(十进制分隔符、货币符号等)与其只设置currency=“EUR”
?@Sulthan,不如设置currency=“EUR”为您工作。在这里更改区域设置是一个不错的选择,因为我们希望我们的货币具有分隔符、货币符号和正确的格式。您好,Sulthan,这几乎就是让roundedDoubleValue=value.flatMap{Double($0)}.map{round($0)}
几乎完成了任务,我再也没有错误了,但我收到了103,应该是103,28。@jo7332哦,那就去掉舍入部分吧。我以为你想舍入,但你可以用格式化程序来完成。更新了。Tks Sulthan,完成了任务。我是Xcode新手,不知道平面图
,我真的不明白d为什么它现在起作用,为什么NSNumber(value:Int(ToConvert)!)
不起作用。谢谢你的帮助。如果有人有其他解决方案,我也很乐意了解其他代码行。Tks@jo7332不能使用Int
,因为ToConvert
不包含整数。因此Int(“1.02”)
将返回nil
和!
之后nil
将使其崩溃。您只需将Int(…)
转换为Double(…)
即可从技术上解决问题,但这仍然太复杂和不安全。