No deberías t convierte entre dobles y cadenas todo el tiempo, ya que tiende a perder precisión (en general, tienes que ser muy cuidadoso si no quieres perder precisión).
Por ejemplo, nextafter(1.0,2.0)
devuelve el doble más pequeño más grande que 1 (exactamente 1.0000000000000002220446049250313080847263336181640625, pero estamos contentos con 1.0000000000000002). Formatear con "% g" simplemente devuelve "1".
Esperamos que NSNumber haga lo correcto, pero [[NSNumber numberWithDouble:nextafter(1,2)] stringValue]
también devuelve "1". De acuerdo con los documentos, -[NSNumber stringValue]
llama al [self descriptionWithLocale:nil]
y lo formatea con "% 0.16g". Eso no es suficiente. Sin embargo, obtenemos la respuesta correcta formateando con "% .17g". Creo que "% .17g" es suficiente siempre que los dobles sean IEEE 754 de 64 bits dobles y las bibliotecas funcionen correctamente, pero no hay garantía.
Al final del día, no hay garantía de que [[NSString stringWithFormat:@"%.17g",n] doubleValue] == n
.
Thankyou Guys! Funcionó ! –
Ahora que es completamente subjetivo –
Miré a mi alrededor y hasta ahora% f y% g parecen ser idénticos según la mayoría de las referencias. ¿En qué se diferencian? – jamone