货币符号和值之间的间隔:iOS swift 3

问题描述:

我正在使用IAP的应用程序。我需要根据位置显示价格。我已经做到了这一点。现在我可以显示基于位置的价格。货币符号和值之间的间隔:iOS swift 3

但是,我需要货币符号和值之间的一些间距。 即我需要9.99美元(目前它显示9.99美元)。

仅供参考:我从itunes获得价格(使用变量从itunes获得价格并在textview中显示它)。

我跟了这没有成功:NSNumberFormatter paddingPosition doesn't work

我也提到这一点,但它不工作,以及: Swift 3 and NumberFormatter (.currency) == ¤?

有什么建议?

我这样做:

var index: Int = 0 { 
    didSet { 

     var monthlyValue = String() 

     if prefs.value(forKey: "monthly") != nil { 

      monthlyValue = prefs.value(forKey: "monthly") as! String 


     } 

     let subcharges : Array<String> = ["Free but limited just to get started","or \(monthlyValue) Billed Monthly",""] 

     let yearlypermonth = Int() 

     var mycurrency1 = String() 

     if prefs.value(forKey: "yearly") != nil { 

      let yearlyvalue = prefs.value(forKey: "yearly") as! String 

      print("wallet view yearlyvalue: \(yearlyvalue)") 

      let firstProduct = StoreManager.shared.productsFromStore[0] 

      if let mycurrency = firstProduct.priceLocale.currencySymbol { 

       print("mycurrency: \(mycurrency)") 

       mycurrency1 = mycurrency 
       prefs.set(mycurrency, forKey: "mycurrency") 

      } 

      let formatter = NumberFormatter() 
      formatter.numberStyle = .currency 
//    formatter.paddingPosition = .afterPrefix 
// 
//    //formatter.locale = Locale(identifier: "en_US") 
//    formatter.paddingCharacter = " " 
//    formatter.formatWidth = 7 


      let number1 = formatter.number(from: yearlyvalue) 

      print("wallet view number1: \(number1)") 

      let secondProd = StoreManager.shared.productsFromStore[1] 

      let numberFormatter = NumberFormatter() 
//    numberFormatter.paddingPosition = .afterPrefix 
//    numberFormatter.paddingCharacter = " " 
//    numberFormatter.formatWidth = 7 
      // Get its price from iTunes Connect 
      numberFormatter.locale = secondProd.priceLocale 
      let price2Str = numberFormatter.string(from: secondProd.price) 

      let currencynumbers2 = secondProd.price.doubleValue/12 

      monthonValueforaYear = String(format: "%.2f", currencynumbers2) 

      print("walletview VC monthonValueforaYear: \(monthonValueforaYear)") 

      //prefs.set(price2Str, forKey: "yearly") 
      prefs.set(monthonValueforaYear, forKey: "monthonValueforaYear") 

     } 
     var charges : Array<String> = ["\(mycurrency1) 0/m","\(mycurrency1 + monthonValueforaYear)/m","Coming Soon"] 

     print("wallet view charges: \(charges)") 

     self.Headingtitle.text = Headingarray[index] 
     self.planchargelabel.text = charges[index] 
     self.subchargelabel.text = subcharges[index] 

有趣的是,subchargelabel价值,我得到一个小间距

,而我试图运行的应用程序的注释部分是注释。只是让你知道它

感谢您的帮助!

尝试格式化所需的字符串,如下所示。

let priceWithSpace: String? = firstProduct.priceLocale.currencySymbol + " " + product.price 

只是放置符号,空间和数量不是一个好主意。它的顺序可能因地区或货币而异。以下方法会给你一个答案。

func customFormattedAmountString(amount: Int) -> String? { 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    formatter.locale = Locale.current 

    if let amountString = formatter.string(from: NSNumber(value: amount)) { 
     // check if it has default space like EUR 
     let hasSpace = amountString.rangeOfCharacter(from: .whitespaces) != nil 

     if let indexOfSymbol = amountString.characters.index(of: Character(formatter.currencySymbol)) { 
      if amountString.startIndex == indexOfSymbol { 
       formatter.paddingPosition = .afterPrefix 
      } else { 
       formatter.paddingPosition = .beforeSuffix 
      } 
     } 
     if !hasSpace { 
      formatter.formatWidth = amountString.characters.count + 1 
      formatter.paddingCharacter = " " 
     } 
    } else { 
     print("Error while making amount string from given amount: \(amount)") 
     return nil 
    } 

    if let finalAmountString = formatter.string(from: NSNumber(value: amount)) { 
     return finalAmountString 
    } else { 
     return nil 
    } 
} 

使用它作为下面,

if let formattedAmount = customFormattedAmountString(amount: 5000000) { 
    print(formattedAmount) 
} 

,将打印出来的美元,

$ 5,000,000.00 

和欧元,

5.000.000,00 € 

当你想有货币之间的空间符号和数量。如果你像第一个答案那样追加字符串,你会得到“5.000.000,00”,而不是所需的 - “5.000.000,00€”。