IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Convertir chaines de caracteres en numerique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par défaut Convertir chaines de caracteres en numerique
    bonsoir,
    un probleme qui parait simple, mais je galere

    j'ai 2 variables char coord1[9] contenu = 8.437500
    char coord2[10] contenu = 43.084937
    ce sont des coordonnées Lat,Long gps

    j'ai bessoin de les retravailler en valeur numerique (division et soustraction)

    j'ai essayé plein de chose, mais sans résultat valable, je me retrouve avec les entiers

    si quelqu'un pouvait me mettre sur la voie

    merci et bonne soirée

  2. #2
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par défaut
    je repond a ma question

    solution trouvé
    double r1;
    double r2;

    pourquoi double ???

    r1=atof(coord1);
    r2=atof(coord2);

    je peu manipuler les 2 variables en tant que valeur numerique (addition,soustraction)

    ce n'est peut-etre pas de la vrai programmation mais ca marche.
    je suis a votre ecoute ou plutot a vous lire
    merci

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Quelle serait le meilleur moyen de stocker de nombre? Réponse le meilleur rapport qualité/simplicité c'est utiliser des double.
    Et la fonction la plus simple pour obtenir cela c'est atof().
    Tu as donc tout juste, et c'est de la vraie programmation.

    Maintenant attention, certaines trames GPS sont en degrés . minutes secondes et ne sont pas en degrés décimaux, dans ce cas il faut effectuer la transformation différemment.

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Quelle serait le meilleur moyen de stocker de nombre? Réponse le meilleur rapport qualité/simplicité c'est utiliser des double.
    Non c'est surtout qu'avec les flottants, on ne peut pas les représenter tous en informatique. Donc, on prend le type ayant la meilleure précision (double précision, sur 64 bits) afin d'éviter les erreurs de conversion au maximum.
    C'est comme cela que je comprends le truc "If the converted value would be out of the range of representable values by a double, it causes undefined behavior."


    Citation Envoyé par dalfab Voir le message
    Et la fonction la plus simple pour obtenir cela c'est atof().
    D'après la documentation de la fonction atof, ce serait la fonction strtod la + multiplateforme (<- liens cplusplus.com en anglais)

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    atof() et strtod() sont toutes les 2 dans le standard, pour les cas simples atof() est suffisante.
    en C++ on préférera std::stod() ou std::from_chars().

    Sinon pour le type double il y a risque de perte de précision à partir du 17ième chiffre, et dans le cas que tu cites, tu as besoin de 9 chiffres significatifs (3+6), le double est donc tout à fait suffisant.

  6. #6
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    Bonsoir,

    Citation Envoyé par dalfab Voir le message
    atof() et strtod() sont toutes les 2 dans le standard, pour les cas simples atof() est suffisante.
    en C++ on préférera std::stod() ou std::from_chars().
    Suffisant avec de grands risques qu'il le faudrait préciser. Car si atof() ne parvient pas à représenter ce qu'il faut convertir pour une raison ou une autre ; la valeur du résultat ne peut en aucun cas être représentée et on obtient alors un comportement indéterminé et je ne parle même pas des implications qui pourraient avoir dans l'exécution d'environnement strict.
    Citation Envoyé par dalfab Voir le message
    Sinon pour le type double il y a risque de perte de précision à partir du 17ième chiffre, et dans le cas que tu cites, tu as besoin de 9 chiffres significatifs (3+6), le double est donc tout à fait suffisant.
    Il faut comprendre que atof ne détecte en aucune façon les erreurs de débordement donc, même-si la variable qui contiendra le résultat est du type double; rien ne garantie que lors de la conversion, la valeur renvoyée par la fonction atof est correct; sans oublier que atof est déprécié.

    À bientôt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir chaine de caracteres en operation
    Par Marlan dans le forum Fortran
    Réponses: 6
    Dernier message: 17/03/2011, 15h14
  2. [VB]Convertir une chaine de caractere en entier
    Par budylove dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/02/2006, 11h06
  3. Convertir chaine de caractere
    Par Antoine NSG dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2005, 15h32
  4. convertir un nombre en chaine de caractere
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 3
    Dernier message: 23/11/2005, 11h24
  5. [langage]trie sur numérique et chaîne de caractère
    Par helene22500 dans le forum Langage
    Réponses: 9
    Dernier message: 31/05/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo