2016-09-30 88 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 
}