Conversion chiffre FLOAT en C++

Bonjour,

J'ai été obligé de passer en C++ avec mes fichiers qui désormais ont pour extension .mm

Depuis tout mes nombres float ne sont pas affichés en entier, il n'y a pas les chiffres après la virgule, quand je veux afficher le nombre avec les virgules : [NSString stringWithFormat:@%.02f,time8]
une erreur s'affiche :

Invalid conversion from 'objc_object*' to 'int64_t'

Alors je suis peut-être à  côté du problème mais j'ai vraiment besoin d'un ptit coup de main
Merci  o:)

Réponses

  • yoannyoann Membre
    22:26 modifié #2
    C'est étrange comme comportement, on dirait que ton float est compris comme un type id...

    Dans l'historique de ton float time8 il y a quoi de particulier ? Tu récupère une valeur en retour d'une méthode ou quoi ? Si tu fait une assignation bête et méchante float test = 2.5 est-ce que tu arrive à  l'afficher sans problème ?
  • speedminouspeedminou Membre
    22:26 modifié #3
    En fait mon float me sert à  afficher un temps en secondes + millisecondes (exemple : 1,22s)
    Donc un NSTimer ajoute 0,01 toutes les 0,01ms à  mon float nommé time8

    timer8=[[NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(chrono:) userInfo:nil repeats:YES] retain];

    time8 += 0.01;

    ça fonctionne sans problème, le truc c'est que pour l'afficher correctement je dois le mettre sous cette forme :

    [NSString stringWithFormat:@%.02fs,time8];

    Et c'est là  qui m'affiche le problème mais seulement dans une fonction, si je met juste time8 il n'y a que le premier chiffre qui est pris en compte pas ceux après la virgule.

    J'espère que c'est assez clair parce que c'est pas évident à  expliquer.
    Sinon j'ai trouvé une solution pour ne plus avoir d'erreur :

    int64_t([NSString stringWithFormat:@%.02fs,time8])

    mais là  ça me fait un nombre à  8 chiffres
  • zoczoc Membre
    février 2010 modifié #4
    dans 1266141608:

    En fait mon float me sert à  afficher un temps en secondes + millisecondes (exemple : 1,22s)
    Donc un NSTimer ajoute 0,01 toutes les 0,01ms à  mon float nommé time8

    timer8=[[NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(chrono:) userInfo:nil repeats:YES] retain];

    :o


    Ya pas comme un problème là  ? Si le type de timer8 est bien type float, cette ligne affecte un pointeur vers un objet de type NSTimer à  une variable de type float....


    dans 1266141608:

    int64_t([NSString stringWithFormat:@%.02fs,time8])

    mais là  ça me fait un nombre à  8 chiffres

    Ce qui est évident si time8 contient une adresse mémoire vers un objet... Je pense qu'au lieu d'essayer de bidouiller, il faudrait arrêter de faire n'importe quoi  ;)
  • yoannyoann Membre
    22:26 modifié #5
    Hum je ne serais pas aussi "direct" que Zoc mais une chose est certaine, il y a un peut de doc a revoirs sur les objets et les types primitifs...

    Ton NSTimer est une classe, si tu veux avoir le typedef utilisé en Cocoa pour les durées, c'est NSTimeInterval et pas NSTimer. NSTimer te sert à  appeler une méthode toutes les X secondes, il faudrait faire un truc comme ça :

    <br />NSTimer *timer = [[NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(chrono:) userInfo:nil repeats:YES] retain];<br /><br />/* ... */<br /><br />-(void)chrono:(void*)context {<br />_timestamp += 0.01;<br />}<br />
    


    où _timestamp est une variable d'instance de type float.

    Mais bon l'important ici et de relier la doc sur l'Objective-C et les objets.
  • speedminouspeedminou Membre
    22:26 modifié #6
    ::) oui je sais c'est de la bidouille mais je vous avoue que tous fonctionne parfaitement. Le seule truc c'est ça, il ne veut pas m'afficher les chiffres après la virgule seulement pour une méthode.

    C'est très perturbent B)
  • zoczoc Membre
    22:26 modifié #7
    dans 1266173351:

    ::) oui je sais c'est de la bidouille mais je vous avoue que tous fonctionne parfaitement.

    En plus de 10 ans de métier j'en ai vu des trucs qui semblent fonctionner correctement, mais qui en fait sont codés n'importe comment et sont prêts à  ne plus fonctionner du jour au lendemain...  ;)
  • speedminouspeedminou Membre
    22:26 modifié #8
    ça ne m'étonne pas :D

    En fait j'ai cerné le problème, il faut que je sache comment afficher un chiffre à  virgule en int64_t
    (en gros :P )
  • zoczoc Membre
    22:26 modifié #9
    Le problème, c'est que justement, int64_t est un type ENTIER (entier signé de 64 bits), pas un réel. Il n'y a donc pas de chiffres après la virgule  ;) .


    Ton problème est donc ailleurs.

  • speedminouspeedminou Membre
    22:26 modifié #10
    :'( pffff merci quand même.
  • AliGatorAliGator Membre, Modérateur
    février 2010 modifié #11
    Oulà  oui y'a p'tet des bases à  relire là , et un peu de repos pour reprendre ça au calme, avant de se mettre au C++ !
    Comme dit zoc, c'est pas en faisant un peu n'importe quoi sans trop réfléchir et trouvant un truc qui semble marcher que c'est bon...
  • 22:26 modifié #12
    Et c'est en faisant n'importe quoi que l'on devient n'importe qui  :o
Connectez-vous ou Inscrivez-vous pour répondre.