2011-08-03 21 views
6

Probablemente muy simple, pero no entiendo ... Tengo una NSString 50.81114 y quiero convertirlo en un doble ...
Actualmente estoy usando [string doubleValue] pero esto está saliendo como 50.811140000002
¡¿Qué está pasando ?!NSString al número doble

Disco

Respuesta

2

Double (y cualquier número de coma flotante) tiene su propio límite de exactitud, normalmente sería alrededor de 15-16 dígitos. Tenga en cuenta que esto no es solo para Objective-C, sino para todos los idiomas debido al límite de la presentación de punto flotante binario.

Lo que muestra es simplemente normal, ya que 50.81114 no se puede presentar con precisión en binario, se debe usar una aproximación.

Usted puede leer Wikipedia para su posterior lectura.

11

debido a la precisión limitada double no se puede almacenar 50.81114. El valor más cercano que se puede almacenar en un doble es 50.811140000002.

Uso NSDecimalNumber lugar. De esta manera:

NSString *string = @"50.81114"; 
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:string]; 
1

Si es necesario mantener este número como un número decimal, en lugar de binario, a continuación, utilizar el número NSDecimalNumber en lugar de double.

Cuestiones relacionadas