¿Por qué UITEXTFIELD.TEXT devuelve el número de flotador exacto cuando se recupera de una matriz?

StackOverflow https://stackoverflow.com/questions/19825257

Pregunta

Tengo una matriz que almacena TextField.Text Input. Luego recupero el texto en otro lugar como flotante. Esto parece darme el "número exacto" del campo de texto.

Ejemplo A

   navtestAppDelegate *appDelegate = 
   (navtestAppDelegate *)[[UIApplication 
    sharedApplication] delegate];

NSMutableArray *storedData = 
 appDelegate.myData;

[storedData replaceObjectAtIndex: myIndex withObject: mytextfield.text];

float number = [[storedData objectAtIndex:myIndex] floatValue];

si mytextfield.text input is 22.8, float number devoluciones 22.8

sin embargo,

Ejemplo B

[storedData replaceObjectAtIndex: myIndex withObject: @"22.8”];

float number  = [[storedData objectAtIndex:myIndex] floatValue];

float number devoluciones 22.7999999

No entiendo por qué obtengo el número exacto en el ejemplo de un

¿Fue útil?

Solución

El valor 22.8 no se puede representar exactamente en el punto flotante binario. Lo que está viendo es una representación basada en el formato de visualización. Los diferentes métodos de visualización pueden usar diferentes formatos de visualización. Mostrar diferentes números de dígitos y el redondeo significa que tanto 22.8 como 22.7999999 son correctos para el número de dígitos que se muestran después del redondeo. Tenga en cuenta que se mostró el 22.7999999 y no el 22.8000000 porque el siguiente dígito fue 2, por lo que el valor mostrado se redondeó.

Esto depende de la base, es decir, las cosas que pueden ser exactos en un número Base puede no ser exacto en una base de números diferente. En este caso, 22.8 en la base de número decimal no puede ser exacta en la base de números binarios.

Esta es la razón por la que existe NSDecimal y la razón por la que el punto flotante no se usa para los valores monetarios.

Esto es algo equivalente a mostrar el valor de PI en Base Decimal, el número de dígitos es infinito, por lo que para cada pantalla alguien decidió cuántos dígitos mostrar. Curiosamente, PI se puede representar exactamente (pero útilmente) en la base de números PI. :-)

En el caso de float y double Hay un número finito de dígitos que se pueden representar.

Otros consejos

Intenta así:-

[storedData replaceObjectAtIndex: myIndex    
 withObject: [NSNumber 
 numberWithFloat:22.8]];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top