2012-03-13 16 views
7

Estoy tratando de recortar ceros después de un punto decimal como el siguiente pero no está dando el resultado deseado.Cómo recortar ceros después del punto decimal

trig = [currentVal doubleValue]; 
trig = trig/100; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setMaximumFractionDigits:0]; 
display.text = [formatter stringFromNumber:[NSNumber numberWithDouble:trig]]; 

El número aún se muestra sin recortar ceros después del punto decimal.

Aquí currentVal es el número que estoy ingresando.

Por ejemplo, si paso "trig" = 123 (Inicialmente "trig" = 123 después de hacer trig/100 quiero mostrar 1.23 pero se muestra como 1.23000000).

Respuesta

2

Desde el documentation, parece que setFractionDigits: es solo para convertir en el otro sentido.

Lo mejor que puede hacer es convertir su número a un número entero antes de formatearlo, p.

double converted = round(trig); // man round for docs 

También puede utilizar las funciones de formato de stringWithFormat: de NSString, pero entonces se perderán todas las ventajas de localización que se obtiene con NSNumberFormatter.

0

es debido a que su tipo de datos no se puede formatear de esa manera.

30

A veces los especificadores de formato C directos hacen un trabajo más fácil que las clases de formateador Cocoa, y se pueden utilizar en la cadena de formato para el mensaje stringWithFormat: normal al NSString.

Si su requerimiento es para no mostrar ningún ceros, entonces la "g" especificador de formato se encarga del trabajo:

float y = 1234.56789f; 

NSString *s = [NSString stringWithFormat:@"%g", y]; 

en cuenta que no hay información de precisión, lo que significa que la biblioteca printf eliminará el rastreando ceros por sí mismo.

Hay más información en docs, que hace referencia a IEEE docs.

+3

Gracias, pero si g = 123,2314100000 en tal caso que desea mostrar como 123,23141 g – ram

+0

Gracias ... Su trabajo bien – ram

+0

Funciona bien, pero da forma exponencial para un gran número y que no quiero eso ... ¿Alguna solución para eso? – Simmy

3

Esto no mostrará ningún valor decimal después de la coma:

display.text = [NSString stringWithFormat:@"%1.0f", trig]; 

Esto simplemente recortar los ceros después de la coma:

Nota, esto puede llevarse el arrastre punto decimal. "124." Puede pasar. Supongo que pronto se publicará una solución más inteligente.

1

Esto puede no ser una solución adecuada donde hay NSNumberFormetter Clase, ¡Pero acabo de hacer esto en lugar de buscar en Google!;)

Aquí está un ejemplo, si ayuda:

-(NSString*) trimZerosAfterDecimalPoint:(NSString*)string_ { 

    double doubleValue=[string_ doubleValue];  
    long leftPart=(long)doubleValue; 
    double rightPart=doubleValue-(double)leftPart; 

    NSString *rightPartAsStr=[NSString stringWithFormat:@"%f", rightPart]; 

    int i=0; 
    for (i=rightPartAsStr.length-1; i>=2; i--) { 
     if ([rightPartAsStr characterAtIndex:i]!='0') {    
      rightPartAsStr=[rightPartAsStr substringWithRange:NSMakeRange(2, i-1)]; 
      break; 
     } 
    } 

    if (i<2) { 
     string_=[NSString stringWithFormat:@"%ld", leftPart]; 
    } else { 
     string_=[NSString stringWithFormat:@"%ld.%@", leftPart, rightPartAsStr]; 
    } 

    return string_; 
} 
1

sólo tenía que hacer esto para uno de mis programas y aquí la forma en que fui al respecto:

- (void) simplify{ 
     int length = (int)[self.calcString length]; 
     for (int i = (int)[self.calcString length]; i > 0; i--) { 
      if ([self.calcString rangeOfString:@"."].location != NSNotFound) { 
       NSRange prevChar = NSMakeRange(i-1, 1); 
       if ([[self.calcString substringWithRange:prevChar] isEqualToString:@"0"]|| 
        [[self.calcString substringWithRange:prevChar] isEqualToString:@"."]) 
        length--; 
       else 
        break; 
     } 
     self.calcString = [self.calcString substringToIndex:length]; 
    } 
} 
1

Estos trabajos

display.text = [@(trig) stringValue]; 
+2

Quizás deba agregar una explicación de por qué funciona. – jbr

4

En caso de que esto ayude a alguien. Quería 1 valor decimal pero no '.0' al final si el float era '1.0'. Usar% g daría notación científica para números más largos, después de que la fealdad funcionó lo suficientemente bien para mí ya que la alta precisión no era crítica.

// Convert to 1 dp string, 
NSString* dirtyString = [NSString stringWithFormat: @"%.1f", self.myFloat]; 

// Convert back to float that is now a maximum of 1 dp, 
float myDirtyFloat = [dirtyString floatValue]; 

// Output the float subtracting the zeros the previous step attached 
return [NSString stringWithFormat: @"%g", myDirtyFloat]; 
+0

Impresionante. Muchas gracias –

Cuestiones relacionadas