Ich habe das gefunden und frage mich, ob es möglich ist, die Eingabe eines Benutzers zu korrigieren. Das heißt, wenn sie anstelle von zwei Dezimalstellen drei Dezimalstellen für einen Dollarbetrag eingeben. Sagen wir 1,111 statt 1,11, können Sie es durch Runden korrigieren? Die Antwort aus vielen Gründen ist nein! Mit Geld würde alles über d.h. 0,001 irgendwann Probleme in einem echten Scheckbuch verursachen.
Hier ist eine Funktion, um die Benutzereingabe auf zu viele Werte nach dem Punkt zu überprüfen. Aber die 1. erlaubt, 1.1 und 1.11.
Es wird angenommen, dass der Wert bereits auf erfolgreiche Umwandlung von einem String in ein Double überprüft wurde.
//func muss dort sein, wo transactionAmount.text im Geltungsbereich ist
func checkDoublesForOnlyTwoDecimalsOrLess()->Bool{
var theTransactionCharacterMinusThree: Character = "A"
var theTransactionCharacterMinusTwo: Character = "A"
var theTransactionCharacterMinusOne: Character = "A"
var result = false
var periodCharacter:Character = "."
var myCopyString = transactionAmount.text!
if myCopyString.containsString(".") {
if( myCopyString.characters.count >= 3){
theTransactionCharacterMinusThree = myCopyString[myCopyString.endIndex.advancedBy(-3)]
}
if( myCopyString.characters.count >= 2){
theTransactionCharacterMinusTwo = myCopyString[myCopyString.endIndex.advancedBy(-2)]
}
if( myCopyString.characters.count > 1){
theTransactionCharacterMinusOne = myCopyString[myCopyString.endIndex.advancedBy(-1)]
}
if theTransactionCharacterMinusThree == periodCharacter {
result = true
}
if theTransactionCharacterMinusTwo == periodCharacter {
result = true
}
if theTransactionCharacterMinusOne == periodCharacter {
result = true
}
}else {
//wenn kein Punkt vorhanden ist und es sich um ein gültiges Double handelt, ist es gut
result = true
}
return result
}