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".
Qu'est-ce qui est vraiment trompeur dans la documentation? –
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
Peut-être que vous devriez ajouter cela à la question pour clarifier ce que vous demandez. (Semble une bonne question pour moi.) –