【问题标题】:iOS Swift - Convert String with $ to DoubleiOS Swift - 将带有 $ 的字符串转换为 Double
【发布时间】:2017-05-13 19:45:24
【问题描述】:

如何转换同时包含数字和字符的字符串?

字符串是这样的

"135,00 kr"

我想成功

135,00

谢谢!

【问题讨论】:

  • "135,00" 不是双精度,而是字符串。 Double 将是 135.0,不带引号。
  • 带货币样式的NumberFormatter
  • 同意,带货币样式的 NumberFormatter 示例:stackoverflow.com/a/24960818/3180368

标签: ios swift string formatting double


【解决方案1】:

您可以采用“蛮力”方法,从字符串中删除所有非数字字符并直接使用内部类型转换。

let numberString     = "135,05 kr"
let decimalSeparator = Locale.current.decimalSeparator ?? "."
let decimalFilter    = CharacterSet(charactersIn:"-0123456789" + decimalSeparator)
let number           = Float(numberString.components(separatedBy:decimalFilter.inverted)
                                         .joined(separator:""))

这将清除字符串中的所有非数字字符。因此它不会受到不一致的千位分隔符或货币符号变化的影响(例如,如果您使用多种货币)。不过,您必须在小数点分隔符上保持一致。

【讨论】:

    【解决方案2】:
    func number() -> Double? {
        let str = String(self.characters.filter { "01234567890.".characters.contains($0) })
        return Double(str)
    }
    

    将此作为扩展名添加到字符串

    【讨论】:

      【解决方案3】:

      试试这个:

      let label = "135,00 kr"
      let space = label.characters.index(of: " ")
      let number = String(label.characters.prefix(upTo: space!))
      
      let formatter = NumberFormatter()
      formatter.decimalSeparator = ","
      let formatted = formatter.number(from: number)
      
      let double = formatted?.doubleValue
      

      【讨论】:

      • 最好设置一个 NumberFormatter 用于货币格式化。对我来说,这看起来像丹麦克朗,小数点分隔符是逗号而不是句号让我认为这是美国以外的地区。
      • 请勿使用此答案中的代码。这不是正确的解决方案。
      • 代码不是wong,不需要downvote。您将如何解决实际问题中的字符串?您不能将“kr”用作 .currencySymbol 或 .currencyCode
      猜你喜欢
      • 2017-12-20
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2011-06-30
      • 1970-01-01
      • 2014-11-18
      相关资源
      最近更新 更多