NSUInteger , resultat en float invalide (Problème de type)

iLandesiLandes Membre
juillet 2014 modifié dans Objective-C, Swift, C, C++ #1

Petite question simple (mais pas pour moi ^^):


 


Pourquoi le code ci-dessous ne renvois dans r qu'une valeur entière (0 ou 1). Y'à  un truc que je ne comprends pas dans la gestion des types.


 


D'avance merci de votre aide


 


s


e


b


 


 


 


NSUInteger items    = [[query items]count];


NSUInteger current  = [player indexOfNowPlayingItem];;


float r             = current / items;


NSLog(@ i %lu of %lu = r %f,  (unsigned long)current, (unsigned long)items, r);


    


return r ;


Mots clés:

Réponses

  • Essaie



    NSUInteger items = [[query items]count];
    NSUInteger current = [player indexOfNowPlayingItem];;
    float r = (float)current / items;
    NSLog(@ i %lu of %lu = r %f, (unsigned long)current, (unsigned long)items, r);

    return r ;
  • Super Merci beaucoup^^


     


    J'ai régulièrement du mal avec les différents types que l'on rencontre en développant. Si quelqu'un à  un explication globale sur les types et leur mélange je suis preneur !!


     


    Cordialement


     


    s


    e


    b


  • Tu as demandé : fais la division entre deux int puis transforme le résultat en float.


    Or la division entre deux int est encore un int.


     


    Donc, il fallait demander : transforme cet int en un float. Divise-le par cet int (le résultat est un float). Et voilà  !


  • AliGatorAliGator Membre, Modérateur
    Oui c'est même du C de base (pas du tout spécifique à  Objective-C donc). Diviser un Int par un Int effectue toujours une division entière.


    10/4 va donner 2, et pas 2.25

    Par contre 10.0/4.0 va retourner 2.25 car tu divises deux floats

    Et 10/4.0 ou 10.0/4 aussi car une division entre un float et un Int ou vue versa donne un float. Par contre entre 2 Int ça donne un Int.


    D'où le type casting que propose colas2 dans sa réponse pour convertir au moins une des 2 valeurs en float avant d'y appliquer la division.
Connectez-vous ou Inscrivez-vous pour répondre.