2012-08-15 11 views
14

Podría ser una solución simple pero no puedo solucionarlo.Float es 0 después de la división entera

estoy dividiendo 2 enteros:

finishedGameFinalScore = [score integerValue]; 
CGFloat interval = 2/finishedGameFinalScore; 
NSLog(@"interval = %f",interval); 

El registro devuelve 0.000000

¿Hay un límite para decimales? Necesito preservar el resultado decimal.

Gracias Shani

+1

'CGFloat finishedGameFinalScore = [marcar floatValue];' 'CGFloat intervalo = 2.0f/finishedGameFinalScore;' – janusbalatbat

+1

Usted tiene que dividir por un número variable de puntero para obtener un número de coma flotante. – Joe

+1

Esto es cierto para cada lenguaje basado en C. La división de dos resultados da como resultado un int. – borrrden

Respuesta

71

La razón por la que su código no funciona es que se está dividiendo un entero por otro entero y luego colar el resultado a un flotador.

Así que tiene 2 (un número entero) y algún otro número (también un número entero). Luego se divide 2 por este número, que probablemente sea mayor que 2. Digamos que es 3.

Integer ve 2/3 y dice "0,66666667? Pshh, nadie necesita nada después del punto decimal de todos modos". Entonces él lo trunca. Simplemente tiene 0.

Luego Integer le da el número al Sr. float y el Sr. float está súper feliz de obtener un número! Es como "¡sí, un 0! Voy a agregar TODOS LOS DÍGITOS SIGNIFICATIVOS". Y así es como terminas con 0.0000000.

Así que sí, simplemente eche primero a flotar. ¡O incluso un doble!

enter image description here

+0

De incluso simplemente 'intervalo CGFloat = 2.0/finishedGameFinalScore;' (agregar el '.0'). Como '2.0' es un 'CGFloat', el resultado será un' CGFloat' manteniendo todos los decimales. –

12

@Dustin dijo u necesitará a Typecast su valor divisor de flotar, ya que va en el flotador se muestra valor entero

CASO 1: Typecast

NSString *score = @"3"; 
int interval = [str intValue]; 
CGFloat interval = (2/(float)interval); 
NSLog(@"interval = %.2f",interval); 

CASO 2: No hay necesidad de encasillado

NSString *score = @"3"; 
float interval = [str floatValue]; 
CGFloat interval = (2/interval); 
NSLog(@"interval = %.2f",interval); 
8

Basta con añadir el f-pista con el número 2. En este caso, que va a hacer el truco.

CGFloat interval = 2.0f/finishedGameFinalScore; 

todas las respuestas de arriba/abajo son correctas y explican por qué este trabajo.

+0

Normalmente, no agregaría esto como una nueva respuesta si ya hay dos respuestas a menos que agregue datos importantes importantes. Podría comentarlo sobre la pregunta u otra respuesta si cree que realmente agrega algo. Pero lo haré +1 porque eres nuevo. – Dustin

0

solo devide el valor largo desde 1.0 y se le asigna a la variable flotante.

unsigned long l1 = 65536; 
unsigned long l2 = 256; 
float f = (l1/1.0)/(l2/1.0); 

NSLog(@"%f",f); 
Cuestiones relacionadas