ios - 区域设置 - 确定数字是否采用小数格式

标签 ios swift locale

我对此答案有疑问:https://stackoverflow.com/a/29783546/2529173

效果很好,但在我的应用程序中,我需要用户选择/更改他的货币。我尝试使用如下语言环境进行设置:

class CurrencyField: UITextField {
  override func awakeFromNib() {
    super.awakeFromNib()
    addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    keyboardType = .numberPad
    textAlignment = .right
    editingChanged()
  }
  func editingChanged() {
    Formatter.currency.locale = Locale(identifier: "es_CL")
    text = Formatter.currency.string(from: (Double(string.numbers.integer) / 100) as NSNumber)
  }
}

struct Formatter {
  static let currency = NumberFormatter(numberStyle: .currency)
}

extension UITextField {
  var string: String { return text ?? "" }
}

extension String {
  var numbers: String { return components(separatedBy: Numbers.characterSet.inverted).joined() }
  var integer: Int { return Int(numbers) ?? 0 }
}

struct Numbers { static let characterSet = CharacterSet(charactersIn: "0123456789") }

extension NumberFormatter {
  convenience init(numberStyle: NumberFormatter.Style) {
    self.init()
    self.numberStyle = numberStyle
  }
}

这是因为 NumberFormatter 不输出该货币的小数。有办法完成这项工作吗?

最佳答案

这是我现在的解决方案:

class CurrencyField: UITextField {

  let locale:Locale = Locale.current

  override func awakeFromNib() {
    super.awakeFromNib()
    addTarget(self, action: #selector(editingChanged), for: .editingChanged)
    keyboardType = .numberPad
    textAlignment = .right
    editingChanged()
  }
  func editingChanged() {
    Formatter.currency.locale = locale
    let divider:Double = pow(Double(10), Double(Formatter.currency.maximumFractionDigits))
    text = Formatter.currency.string(from: (Double(string.numbers.integer) / divider) as NSNumber)


  }
}

关于ios - 区域设置 - 确定数字是否采用小数格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41711544/

相关文章:

UIWebView 中的 HTML 格式化文本在格式化文本后显示一个栏

ios - 使用 NSTimer 从 0.00 计数到 176.20

ios - 在WatchOS上使用AVAudioEngine录音时禁止播放

ios - 从 NSLayoutConstraint 获取高度值

java - 如何正确使用 java.util.Locale 检查澳大利亚语言环境

ios - 如何在接收远程通知时从应用程序委托(delegate)正确转换到 View Controller ?

iOS - 我可以将 Google Ads 或 Apple iAds 放置在 App Store 之外的应用上吗?

ios:非空数组上的索引越界错误

date - 如何使用语言环境将日期转换为字符串?

java - 在多个语言环境中将字符串解析为 BigDecimal