Las mismas reglas que se aplican C: 2
y 3
son enteros, por lo 2/3
es una división entera. La división entera trunca para que 2/3
produzca el número entero 0
. Ese entero 0
se convertirá en un flotador de doble precisión para la llamada a ceil
, pero ceil(0)
es 0
.
Cambiar el código para:
NSLog(@"CEIL %f",ceil(2.0/3.0));
mostrará el resultado que esperas. Agregar el punto decimal hace que las constantes se reconozcan como números de punto flotante de precisión doble (y 2.0f
es cómo debe escribir un número de coma flotante de precisión única).
solución Maudicus' funciona porque (float)2/3
arroja el entero 2
a un flotador y reglas de la promoción de C significa que va a promover el denominador a punto flotante con el fin de dividir un número de coma flotante por un entero, dando un resultado de coma flotante.
lo tanto, su estado de cuenta actual ceil([myNSArray count]/3)
se debe cambiar a cualquiera:
([myNSArray count] + 2)/3 // no floating point involved
O:
ceil((float)[myNSArray count]/3) // arguably more explicit
Does not '2/3.0' trabajo también? –
Sí. O '2.0/3'. Las promociones tipo se ejecutan en formatos de punto flotante. – Tommy