Por que o meu objeto de impressão “2” NSNumberFormatter para a entrada de 1.0?
-
19-09-2019 - |
Pergunta
que se parece com um bug na API:
Quando a minha entrada CGFloat é de 0,0, fico com esta:
Input = 0.000000, Output = +0
Quando a minha entrada CGFloat é de 1,0, fico com esta:
Input = 1.000000, Output = +2
Obviamente isso não é o que eu quero; -)
Agora é aqui como eu crio que NSNumberFormatter objeto:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setAlwaysShowsDecimalSeparator:NO];
[formatter setAllowsFloats:YES];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setMinimumFractionDigits:0];
[formatter setPlusSign:@"+"];
[formatter setMinusSign:@"-"];
[formatter setPositivePrefix:@"+"];
[formatter setNegativePrefix:@"-"];
[formatter setRoundingMode:NSNumberFormatterRoundUp];
e é assim que eu deixá-lo formatar meu CGFloat de 1.0f:
CGFloat myValue = 1.0f;
NSNumber *number = [NSNumber numberWithFloat:myValue];
NSLog(@"Input = %f, Output = %@", myValue, [self.inputValueFormatter stringFromNumber:number]);
Pode ser o RoundingMode o problema aqui? Qual devo especificar? Ou existe outra causa para esse comportamento estranho?
Solução
Adicionando este parece fazer o truque para mim, embora eu não sei por que ele faz:
[formatter setRoundingIncrement: [NSNumber numberWithFloat: 1]];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow