[Résolu] Précision flottante NSNumber
kasey
Membre
Bonjour,
Je rencontre un petit problème dans l'utilisation de NSNumber ou NSDecimalNumber et accessoirement de son formatage.
Je pense que le code est plus parlant qu'un long discours :
Le résultat est très exotique du fait je pense que ma valeur est trop grande pour être contenue dans un simple float ou NSNumber
Quelqu'un aurais une piste a me donner sur le travail et le formatage de données de taille importante?
Je rencontre un petit problème dans l'utilisation de NSNumber ou NSDecimalNumber et accessoirement de son formatage.
Je pense que le code est plus parlant qu'un long discours :
<br /> float origine = 123456789.125 ;<br /> NSLog(@"Origine : %0.3f", origine);<br /> <br /> NSDecimalNumber *four = [[NSDecimalNumber alloc] initWithFloat:123456789.125];<br /> NSLog(@"Float : %f", four);<br /> <br /> NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];<br /> <br /> [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];<br /> [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; <br /> [numberFormatter setRoundingMode:NSNumberFormatterRoundCeiling]; <br /> [numberFormatter setThousandSeparator:@"'"]; <br /> [numberFormatter setDecimalSeparator:@","]; <br /> [numberFormatter setGroupingSize:3]; <br /> [numberFormatter setAllowsFloats:TRUE]; <br /> [numberFormatter setAlwaysShowsDecimalSeparator:TRUE]; <br /> [numberFormatter setMaximumFractionDigits:1]; <br /> [numberFormatter setGeneratesDecimalNumbers:YES];<br /> <br /> NSLog(@"Format : %@", [numberFormatter stringFromNumber:four]);
Le résultat est très exotique du fait je pense que ma valeur est trop grande pour être contenue dans un simple float ou NSNumber
2008-08-04 16:42:12.415 MiseEnForme[5442:10b] Origine : 123456792.000<br />2008-08-04 16:42:12.417 MiseEnForme[5442:10b] Float : 353206826085862497113622027768969418236603717132235932614787072.000000<br />2008-08-04 16:42:12.418 MiseEnForme[5442:10b] Format : 123'456'792,1
Quelqu'un aurais une piste a me donner sur le travail et le formatage de données de taille importante?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
[tt]NSLog(@Float : %f, four)[/tt]
à la place fait :
[tt]NSLog(@Float : %@", four)[/tt]
ou mieux
[tt]NSLog(@Float : %f, [four floatValue])[/tt]
Ceci dit, il y a effectivement sans doute trop de chiffres significatif pour un float.
Mais la valeur est toujour différente de 123456789.125
Comment faire pour passer sur des variables plus grandes, comme par exemple de l'int au long ?
Et surtout avec les objets fournis par apple du genre NSNumber ???
"float" n'est pas assez précis pour ce que tu veux apparemment.
Il ce trouve que j'avais juste oublier de remplacer le initWithFloat par un initWithDouble :)beta:
Merci pour tout