Pregunta

Tengo un pequeño problema y no puedo encontrar una solución!

Mi código es (esto es sólo un código de ejemplo, pero mi código original hacer algo como esto):

float x = [@"2.45" floatValue];


for(int i=0; i<100; i++)
    x += 0.22;

NSLog(@"%f", x);

la salida es 52.450001 52.450000 y no!

No sé, porque esto sucede!

Gracias por cualquier ayuda!

~ ~ SOLUCIONADO

Gracias a todos! Sí, he resuelto con el tipo doble!

¿Fue útil?

Solución

Los flotadores son una representación de números con una cierta precisión. No todos los valores se puede representar en este formato. Ver aquí también.

Puede pensar fácilmente por qué este sería el caso: Hay un número ilimitado de serie sólo en el intervall (1..1), pero un flotador sólo tiene un número limitado de bits para representar todos los números de (- MAXFLOAT..MAXFLOAT).

Más acertadamente: en una representación entera de 32 bits hay un número contable de enteros para ser representado, pero hay una innumerable número infinito de valores reales que no puede ser plenamente representados en una representación limitada de 32 o 64 bits. Por lo tanto existe no sólo es un límite para el valor real representable alta y más baja, sino también a la precisión.

¿Por qué es un número que tiene pequeñas dígitos después del punto flotante afectada? Debido a que la representación se basa en un sistema binario en lugar de un decimal, por lo demás números fácilmente representado a continuación, los decimales.

Otros consejos

Los números de punto flotante no siempre pueden ser representados fácilmente por las computadoras. Esto conduce a la inexactitud en algunos dígitos.

Es como yo que le pregunta qué es 1/3 en decimal. No importa cuánto te esfuerces, no vas a ser capaz de decirme lo que es porque decimal no puede describir con precisión ese número.

Los flotadores no se puede describir con precisión algunos números decimales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top