2017-08-17 4 views
0

J'ai beaucoup de chaînes comme "9904962" & "57053717" J'ai besoin de les convertir en CLLocationDegrees pour créer un objet CLLocation.Convertir chaîne sans séparateur en Double/CLLocationDegrees

Le problème est la virgule/marque de ponctuation manquante.

que je pouvais faire le comptage des caractères et définir le signe de ponctuation comme ceci:

var coordinateString = "57053717" 

let offset = coordinateString.characters.count > 7 ? 2 : 1 

coordinateString.insert(".", at: coordinateString.index(coordinateString.startIndex, offsetBy: offset)) 

alors mon coordinateString serait « 57,053717 » ou « 9,904962 »

Mais je ne pense pas que ce soit le meilleur solution, cela ne couvre que les cas où la chaîne d'origine est plus longue ou plus courte que 7 caractères.

Quelle est la meilleure solution?

+0

Le nombre de chiffres dans la partie décimale est toujours 6? Si _no_, vous ne pouvez pas distinguer '57.053717' et' 5.7053717' avec la chaîne donnée. – OOPer

+2

si elles ont toujours 6 chiffres de précision, il suffit de créer un double de votre chaîne et de diviser par 1 million –

+0

Un coup d'oeil rapide dans les données, il semble que sa précision est toujours 6 chiffres, mais une coordonnée pourrait être aussi longue 57.05381847826012. Puis diviser par un million ou distinguer la partie fractionnaire de 6 caractères ne fonctionnerait pas. – TSkovsgaard

Répondre

0

Swift3.0

let numberString: NSMutableString = "57053717" // Convert string to MutableString 

let offset = numberString.characters.count > 7 ? 2 : 1 // finding offset value 

numberString.insert(".", at: offset) // insert "." in offset index 
print(numberString) 

let doubled = numberString.doubleValue // convert to double vale 
print(doubled) 

sortie: 57,053717