2016-09-30 60 views
1

我试图删除空尾随小数和,而不是使用浮法扩展.droplast()空十进制我要考虑使用droplast()如果结果有任何尾随零:删除与SWIFT 3

  if result.contains(".0") { 
       result.characters.dropLast() 
      } 

      if result.contains(".00") { 
       result.characters.dropLast(2) 
      } 

这似乎并没有工作,我得到警告:

调用的结果 'droplast()' 是未使用

回答

3
使用正则表达式,小数点后的数字并不重要

替代解决方案:

var result = "1.00" 
result = result.replacingOccurrences(of: "\\.0+$", 
          with: "", 
         options: .regularExpression, 
         range: result.startIndex..<result.endIndex) 

考虑你甚至可以省略range参数整个字符串:

result = result.replacingOccurrences(of: "\\.0+$", 
          with: "", 
         options: .regularExpression) 
+0

工作感谢哟ü,但是需要我花一些时间来理解它:D特别是范围位......但是在任何情况下都要谢谢! – Brewski

+0

*范围位*的类型是'Range ',可以用半开范围运算符'.. <'创建。在这种情况下,'range'参数甚至可以省略。正则表达式模式在字符串末尾搜索一个点('\\。'),后面跟着一个或多个零位('0 +')* – vadian

+0

@Brewski:在Swift 3中,范围:'参数是可选的,你可以简单地省略它。 –

1

dropLast方法将返回离开关掉落的物品子序列,所以在这种情况下,它不会修改结果变量,那么你就需要创建一个基于dropLast方法调用的结果产生一个新字符串并将其分配给结果变量

var result: String = "1.00" 
var dropCount = getTrailingDecimalCount(from: result) 
print(dropCount) // outputs 2 

if let dropCount = dropCount { 
    result = String(result.characters.dropLast(dropCount)) 
    print(result) // outputs 1. 
} 

func getTrailingDecimalCount(from string: String) -> Int? { 
    var counter = 0 

    guard string.characters.contains(".") else { 
    return nil 
    } 

    for char in string.characters.reversed() { 
    if char == "." { 
     break 
    } 

    counter = counter + 1 
    } 

    return counter 
}