NSNumber de CGFloat
Est-il un moyen sûr de "convertir" un CGFloat
à un NSNumber
?
NSNumber
a la numberWithFloat:
et numberWithDouble:
méthodes mais CGFloat
étant défini comme float
ou double
selon la plate-forme, il semble risqué de les utiliser soit l'un d'entre eux.
Ou est numberWithDouble:
de sécurité à utiliser avec un CGFloat
, car il est celui avec le plus de précision ?
Si vous avez une assez haute compilateur version, il suffit d'écrire @(myNumber) et il sera résolu au moment de la compilation. Cependant, vous pouvez appeler en toute sécurité [NSNumber numberWithDouble: myNumber], si CGFloat est défini à double vous le faites correctement, CGFloat est défini à flotteur vous n'avez pas encore perdu toute précision.
coffre-fort? pouvez-vous expliquer?
sûr que "sans précision perte". Est-ce pourquoi j'ai été downvoted ?
Je baisse voté parce que à mon humble avis, vous êtes un peu plus de réflexion. C est plein de fonctions que la poignée doubles, elle n'est pas remplacée à travailler également avec des flotteurs simplement parce que si vous passez un flotteur au lieu d'un double rien de nuisible peut arriver. Il va juste être implicitement coulé à un double, qui utilise une précision supplémentaire.
Si vous êtes à la manipulation de l'argent, vous pouvez envisager d'utiliser un point fixe ou représentation décimale. Voir
coffre-fort? pouvez-vous expliquer?
sûr que "sans précision perte". Est-ce pourquoi j'ai été downvoted ?
Je baisse voté parce que à mon humble avis, vous êtes un peu plus de réflexion. C est plein de fonctions que la poignée doubles, elle n'est pas remplacée à travailler également avec des flotteurs simplement parce que si vous passez un flotteur au lieu d'un double rien de nuisible peut arriver. Il va juste être implicitement coulé à un double, qui utilise une précision supplémentaire.
Si vous êtes à la manipulation de l'argent, vous pouvez envisager d'utiliser un point fixe ou représentation décimale. Voir
NSDecimal
et NSDecimalNumber
.OriginalL'auteur Guillaume Algis | 2013-06-12
Vous devez vous connecter pour publier un commentaire.
Je crois
@
NSNumber
littérale est assez bonLire la suite ici: http://clang.llvm.org/docs/ObjectiveCLiterals.html
OriginalL'auteur Lukas Kukacka
C'est la façon dont j'ai géré ça:
CGFLOAT_IS_DOUBLE
est défini dansCGBase.h
conditionnellement par la plate-forme.Oui, mais vous gaspillez de cycles pour convertir entre float et double sur les plates-formes où CGFloat est un float. Mais quoi que ce soit. L'utiliser, ne pas l'utiliser. Je l'ai écrit il y a longtemps et je continue à l'utiliser. Il fonctionne pour moi.
Thnaks @ipmcc, je vais utiliser Lukas solution, mais le vôtre est ce que je cherchais à l'origine.
Je trouve bizarre ce n'est pas NSNumber déjà, depuis qu'ils ne s'ajouter des méthodes pour NSInteger.
OriginalL'auteur ipmcc