2016-09-30 3 views
1

Ich versuche, für Schwimmer leer Hinter Dezimalstellen und statt mit einer Erweiterung entfernen möchte ich mit droplast(), wenn das Ergebnis keine nachgestellten Nullen hat zu berücksichtigen:leer dezimal entfernen mit .droplast() in schnellen 3

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

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

Dies scheint nicht zu funktionieren und ich erhalte die Warnung:

Ergebnis Aufruf von 'droplast()' wird nicht verwendet

Antwort

3

Alternative Lösung für reguläre Ausdrücke verwenden, die Anzahl der Dezimalstellen spielt keine Rolle:

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

die gesamte Zeichenfolge In Anbetracht kann man sogar die range Parameter weglassen:

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

Das hat funktioniert danke yo Du wirst aber einige Zeit brauchen, um alles zu verstehen: D speziell die Range bit ... aber danke auf jeden Fall !!! – Brewski

+0

Das * Range-Bit * hat den Typ 'Range ', der mit dem halboffenen Bereichsoperator '.. <' erzeugt werden kann. Der Parameter 'range' kann in diesem Fall sogar weggelassen werden. Das reguläre Ausdruckmuster durchsucht * einen Punkt ('\\.'), Gefolgt von einer oder mehreren Nullstellen ('0 +') am Ende des Strings ('$') * – vadian

+0

@Brewski: In Swift 3 ist das ' Bereich: 'Parameter ist optional und Sie können es einfach weglassen. –

1

dropLast Methode wird eine Teilfolge zurück, die die abgelegten Elemente aufhört, so dass in diesem Fall wird es nicht die Ergebnisvariable ändern, dann würden Sie ein neues String erstellen müssen basierend auf dem Ergebnis von dropLast Methodenaufruf und ordnen Sie es Ergebnisvariable zu.

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 
} 
Verwandte Themen