Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 尝试将dic值转换为货币值时出现问题_Ios_Swift_Currency_Nsnumber_Numberformatter - Fatal编程技术网

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(…)
即可从技术上解决问题,但这仍然太复杂和不安全。