1

J'ai trouvé une question intéressante ce qui n'est pas décrit sur internet, même est trompeuse dans le apple documentation. Quelles sont les différences entre:kCFNumberFormatter rond différences

kCFNumberFormatterRoundCeiling 

kCFNumberFormatterRoundFloor 

kCFNumberFormatterRoundDown 

kCFNumberFormatterRoundUp 

kCFNumberFormatterRoundHalfEven 

kCFNumberFormatterRoundHalfDown 

kCFNumberFormatterRoundHalfUp 

?

explication kCFNumberFormatterRoundCeiling est égale à kCFNumberFormatterRoundUp mais ils ne fonctionnent pas la même chose, le même cas kCFNumberFormatterRoundFloor et kCFNumberFormatterRoundDown

+0

Qu'est-ce qui est vraiment trompeur dans la documentation? –

+0

L'explication de kCFNumberFormatterRoundCeiling est égale à kCFNumberFormatterRoundUp mais ils ne fonctionnent pas de la même façon, le même cas dans kCFNumberFormatterRoundFloor et kCFNumberFormatterRoundDown – flatronka

+0

Peut-être que vous devriez ajouter cela à la question pour clarifier ce que vous demandez. (Semble une bonne question pour moi.) –

Répondre

0

La documentation est en effet ambigous. Les deux kCFNumberFormatterRoundFloor et kCFNumberFormatterRoundDown sont documentées comme

Arrondir au prochain plus grand nombre avec le nombre approprié de fraction chiffres.

Un petit test montre que ces modes d'arrondi donnent des résultats différents pour les nombres négatifs .

kCFNumberFormatterRoundFloor se comporte de manière similaire à la fonction floor(). Il arrondit toujours à une valeur plus petite (ou égale). D'autre part kCFNumberFormatterRoundDown arrondit "vers zéro", c'est-à-dire qu'il renvoie donne un nombre dont la valeur absolue est inférieure ou égale à la valeur absolue de l'entrée.

Exemple: (en utilisant NSNumberFormatter)

NSNumberFormatter *f1 = [[NSNumberFormatter alloc] init]; 
[f1 setMaximumFractionDigits:0]; 
[f1 setRoundingMode:NSNumberFormatterRoundFloor]; 

NSNumberFormatter *f2 = [[NSNumberFormatter alloc] init]; 
[f2 setMaximumFractionDigits:0]; 
[f2 setRoundingMode:NSNumberFormatterRoundDown]; 

double x = -1.5; 
NSLog(@"%@, %@", [f1 stringFromNumber:@(x)], [f2 stringFromNumber:@(x)]); 
// Output: -2, -1 

x = + 3.5; 
NSLog(@"%@, %@", [f1 stringFromNumber:@(x)], [f2 stringFromNumber:@(x)]); 
// Output: 3, 3 

De même, kCFNumberFormatterRoundCeiling renvoie une valeur qui est supérieure ou égale à l'entrée (comme ceil()), et kCFNumberFormatterRoundUp tours "loin de zéro".