El usuario ingresará un valor en dólares como int
, y me gustaría convertir el resultado en una cadena abreviada y formateada. Entonces, si el usuario ingresa 1700, la cadena diría "$ 1.7k". Si el usuario ingresa 32600000, la cadena dirá "$ 32.6m".Convertir int en cadena acortada y formateada
actualización
Aquí está el código que tengo hasta ahora. Parece estar funcionando para números ~ 10k. Simplemente agregaría más declaraciones if para números más grandes. Pero, ¿hay una manera más eficiente de hacer esto?
NSNumberFormatter *nformat = [[NSNumberFormatter alloc] init];
[nformat setFormatterBehavior:NSNumberFormatterBehavior10_4];
[nformat setCurrencySymbol:@"$"];
[nformat setNumberStyle:NSNumberFormatterCurrencyStyle];
double doubleValue = 10200;
NSString *stringValue = nil;
NSArray *abbrevations = [NSArray arrayWithObjects:@"k", @"m", @"b", @"t", nil] ;
for (NSString *s in abbrevations)
{
doubleValue /= 1000.0 ;
if (doubleValue < 1000.0)
{
if ((long long)doubleValue % (long long) 100 == 0) {
[nformat setMaximumFractionDigits:0];
} else {
[nformat setMaximumFractionDigits:2];
}
stringValue = [NSString stringWithFormat: @"%@", [nformat stringFromNumber: [NSNumber numberWithDouble: doubleValue]] ];
NSUInteger stringLen = [stringValue length];
if ([stringValue hasSuffix:@".00"])
{
// Remove suffix
stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-3)];
} else if ([stringValue hasSuffix:@".0"]) {
// Remove suffix
stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-2)];
} else if ([stringValue hasSuffix:@"0"]) {
// Remove suffix
stringValue = [stringValue substringWithRange: NSMakeRange(0, stringLen-1)];
}
// Add the letter suffix at the end of it
stringValue = [stringValue stringByAppendingString: s];
//stringValue = [NSString stringWithFormat: @"%@%@", [nformat stringFromNumber: [NSNumber numberWithDouble: doubleValue]] , s] ;
break ;
}
}
NSLog(@"Cash = %@", stringValue);
Usted puede hacerlo con un simple si ... else si ... – Selkie
Estoy seguro de que ha intentado algo antes de hacer su pregunta, pero su código no funcionó. ¿Podría publicar su mejor esfuerzo? – dasblinkenlight
¿Cómo obtendrías el punto decimal allí? es decir, convertir 1700 a 1.7. Creo que es con lo que estoy luchando. Divídalo antes de convertirlo a la cadena? – bmueller