[Résolu] Convertir un NSString en un CGFloat
busterTheo
Membre
Bonjour,
un petit problème sympathique.
J'ai consulté tous (enfin presque) les posts sur le web à ce sujet, et je fais donc comme j'ai compris.
Et lorsque je vérifie précisément, y'a une erreur de conversion. Pas très importante, mais cela demande d'être ultra précis.
voici un code d'exemple :
let str = "1.24232501828937"
let cgf = CGFloat((str as NSString).floatValue)
println("str = \(str)")
println("cgf = \(cgf)")
et cgf est différent de str.
J'ai ça en sortie :
str = 1.24232501828937
cgf = 1.24232506752014
Si quelqu'un a une idée, je suis preneur. Merci d'avance.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai pas vraiment le temps de m'étendre sur le sujet parce que j'ai du travail mais ce code te permettra de faire ce que tu veux :
Tu colle ça dans un fichier à part et tu peux maintenant initialiser un CGFloat depuis un String. Attention, c'est un failable initializer et donc renvoie nil si il n'arrive pas à parser un nombre décimal dans le String que tu lui donne.
ola c'est du chinois pour moi - enfin merci quand même.
Tu as mal compris ce qui est expliqué sur StackOverFlow
Remplace :
Par :
Et ça marche (je viens de tester)
CGFloat est une variable flottante en DOUBLE précision, ce qui nécessite l'utilisation de NSString.doubleValue.
NSString.floatValue effectue la conversion en simple précision, moins précis.
En fin de journée. J'éclate de rire. Excuse moi. Mais là , on est carrément dans le délire. C'est de la science fiction. Degré d'abstraction maximal. Moi, j'aimais bien le php...
Bon, je teste et je te répond. Merci beaucoup.
Ah ouais purée, ça marche grave.
Un grand bravo à toi, ou bien, comme tu le dis, j'avais
désolé.
Encore merci, ça va bien m'aider sur les histoires de bounds.origin.x avec les (CGAffineTransformTranslate) et tout y couanetis.
Je galère encore sur ce sujet, mais cela fera certainement l'objet d'un nouveau post, lorsque j'aurai vraiment tout compris sur le sujet, et bloquerai encore.
L'une des particularité de Swift est d'être un langage FORTEMENT typé. Moi j'aime bien ça..
Oh mais moi je ne suis pas habitué. J'ai juste cherché comment faire avec une recherche Google .. Et j'ai compris après le pourquoi du comment, sachant que CGFloat est un double.
@Ali
En fait, CGFloat désigne un flottant, donc le nom est aussi logique que NSInteger qui désigne un entier.
Le seul piège, c'est que le nombre de bit utilisé pour le stocker n'est pas défini dans le nom.
L'erreur c'est de supposer que CGFloat = float (c'est-à -dire un flottant 32 bits).
@Theo
En fait, ce n'est pas abstrait mais au contraire très concret.
Entre deux nombres réels, il y a une infinité de nombre réels. Pour faire rentrer ça dans une mémoire d'ordinateur, il faut faire des sacrifices. En fonction de la quantité de bits qu'on utilise (32/64), on va pouvoir représenter plus ou moins de réels parmi l'infinité qu'il y a.
Après si tu veux une précision connue sur un nombre de chiffres après la virgule donné sur un intervalle de réels connu, alors il faut utiliser une représentation à virgule fixe et non pas flottante.
C'est la réalité qui est abstraite (enfin sa représentation mathématique) et l'informatique qui est concrète.
merci pour tout ça.
Je vois que nous avons des mathématiciens ici, ça fait plaisir.
C'est justement un petit problème de trigo, tout con que je n'arrive pas à résoudre. J'en ai plein dans mon projet, je les ai tous résolu, mais celui-ci, je bloque. ça bug. Je le posterai dans un prochain post, car je dois d'abord l'adapter dans un nouveau projet simple pour que cela soit explicite et sans cinquante variables ...
Soch cach toa ..
???
Ou, en anglais, Soh Cah Toa
D'abord on écrit :
Sosh, Coach, et Toi.
Ensuite, sin(0) = 0; cos(1) = 0. ça suffit largement... Suffit au pire de redessiner un triangle rectangle avec un angle bien plus petit que l'autre et tu tu devineras si c'est l'adjacent ou l'opposé que tu dois divisé par l'hypoténuse...
Oui bon, mes derniers cours de trigonométrie remonte à bien longtemps.
Buster, c'est une formule mnémotechnique pour se rappeler les formules de base de la trigo.
Sosh => Sinus = Opposé / Hypothenuse
Cash => Cosinus = Adjacent / Hypothenuse
Toa => Tangente = Opposé / Adjacent
C'est plus facile de s'en souvenir avec une prononciation "humaine" au lieu d'une formule de chimie.
Ah ok, je comprend.
Mais je n'ai pas besoin de mnémotechnique, j'ai mes notes, mes cours, mes bouquins, et surtout google.
Donc, pas de soucis pour retrouver n'importe quelle formule de frigo, aussi complexe soit-elle (genre arc, etc). J'ai vraiment tout ce qu'il faut.
Non, le soucis est lié à une notion de (je fais pas le dire en bon français) - pas trouver une distance mais la complémentaire d'une distance au sein d'une autre.
Tout marche sur le papier mais pas en réel dans l'appli.
De toute façon, je vais poster un nouveau post, mais je dois préparer le projet...