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++Builder Discussion :

Conversion peut perdre des chiffres signicatifs


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut Conversion peut perdre des chiffres signicatifs
    Bonjour,

    Je suis présentement en train de convertir un logiciel que nous avions fait en C++ Builder 5 en C++ Builder 2006. Lorsque je compile en Builder 5, je n'ai aucune avertissement, cependant lorsque je compile avec Builder 2006, j'ai une foule d'avertissement. Il est à noter que dans les deux cas, tous les avertissements sont activées.

    La foule d'avertissement que j'obtient est toujours la même W8071 La conversion peut perdre des chiffres significatifs. Quand je double-click sur mon avertissement, il me renvoit toujours à un assignation sur un float.

    Par exemple :
    Il va me donner un avertissement sur "float a = 0.0;", mais si j'écris "float a = 0;" ou bien "double a = 0.0;" ou bien "float a = (float)0.0;". je n'ai pas cette avertissement. Et je ne veux pas convertir tout mes float en double, ni être obligé de caster avant d'assigner à mon float.

    Est-ce que quelqu'un peut m'aider ?

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    Si tu es sur du fonctionnement de ton programme

    tu peut ajouter cette ligne

    et tu n'aura plus le message d'avertissement, mais ca ne résoudre pas ton problème pour autant

    mais bon vu que tu a déja du l'utilisé, ca ne devrait pas poser de problème

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut
    Tout de même je préfère ne pas avoir de messages d'avertissement et tout les avoir d'activer, est-ce que ce serait un bug ou simplement un option de compilation à propos des float que je pourrais avoir omis ?

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    je vien de tester la ligne

    et je n'ai pas eu d'avertissement :/
    donc il faudrait plus de code (principalement les entêtes) pour p-e trouver l'erreur

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut
    Citation Envoyé par Pendary
    je vien de tester la ligne

    et je n'ai pas eu d'avertissement :/
    donc il faudrait plus de code (principalement les entêtes) pour p-e trouver l'erreur
    Tu as tester en Builder 2006 avec toute les avertissements d'activer ? car par défaut, l'avertissement 8071 n'est pas active

    Si je créer un nouveau code, et que je ne mets que la ligne float a = 0.0, j'ai l'avertissement à la compilation.

    Mais tout de mème si je créer un nouveau projet, vois l'entête qu'il créé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::FormCreate(TObject *Sender)
    {
    	float a = 0.0;
    }
    //---------------------------------------------------------------------------
    [C++ Warning] Unit2.cpp(19): W8071 Conversion may lose significant digits
    [C++ Warning] Unit2.cpp(20): W8004 'a' is assigned a value that is never used
    [C++ Warning] Unit2.cpp(20): W8057 Parameter 'Sender' is never used

    sont les avertissements que j'ai.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    effectivement, je n'avais pas tout les avertissements, je les ai donc activer

    ensuite j'utilise builder 6 et non pas le 2006, donc ca peut aussi venir de ça :/

    et j'ai tout recompilé pour tester et je n'ai pas d'avertissement, a part celui-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C++ Avertissement] Unit1.cpp(58): W8004 'a' est affecté à une valeur qui n'est jamais utilisée
    mais pourquoi ne transforme tu pas tout tes float en double ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut
    Moi aussi lorsque je compile en builder 5 tout est ok, mais mon problème est en 2006 http://www.developpez.net/forums/ima...s/icon_cry.gif


    Je ne veux pas convertir en double car comme l'application est déja en fonction, (la version sous CBuilder 5) et que nous sauvegardons les donnée dans des fiichiers de données qui ont des structure avec des float, et ce serait beaucoup trop long convertir tout les fichier, car l'application fonction depuis tres longtemps, elle avait été conçu en Turbo C au départ. Donc il y a une tonnes de fichiers de données. Et nous nous devons de pouvoir consulter ses fichiers en tout temps.

    Donc changer les float en double serait une catastrophe.

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Par défaut
    je ne sais pas quoi te dire :/ a part que si ton application fonctionne correctement sous Builder 5 alors elle fonctionnera sous 2006

    2006 t'as juste fait remarquer une erreur de programmation qui était déja présente depuis le début, mais que le compilateur n'avait pas détecté

    mais je me trompe p-e, je vais laisser les autres repondrent

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut
    Merci beaucoup Pendary pour toutes tes réponses

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 118
    Par défaut
    Bonjour,

    je me permets d'intervenir sur ce sujet car j'ai eu des soucis idem lors
    de la migration BCB5 vers BCB6.

    Voici un lien vers le sujet de l'époque. Peut-être que cela poura t'aider.

    http://www.developpez.net/forums/sho...d.php?t=192881

    @+

    Xav

  11. #11
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Salut,

    pourrais-tu essayer ceci:


  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut
    Ça ne me donne pas d'avertissement, mais je trouve absurde d'être obliger de faire un cast sur une assignation directe.

  13. #13
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Je suis d'accord avec toi, mais apparemment, CBuilder est très à cheval sur certains principes.
    La solution est donc de désactiver le Warning, mais cela comporte un risque de ne pas être averti, un jour, d'un petit dysfonctionnement.

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Par défaut
    Je suis de l'avis de rtg57.

    J'ai fréquemment des erreurs en BCB (5) en appelant des fonctions de l'API Win32 alors que le même code passe comme une lettre à la poste avec VC6. Etant donné que c'est le même code, et que je fais ça depuis longtemps, je ne remet pas en cause sa validité. La seule solution est alors de caster.
    BCB est effectivement sensible au typage des variables, mais comme il est difficile d'être 100% cohérent avec toutes les librairies que l'on utilise je ne vois pas ou est le mal de forcer un peu les choses.

    J'ai rarement casté de float en double, mais je me souviens avoir lu sur le Msdn que c'etais à peu près sans danger.

    Est-ce que c'est sans danger ? (Marathon Man)

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

Discussions similaires

  1. [XL-2003] Conversion des chiffres en Mois
    Par zahidovich dans le forum Excel
    Réponses: 6
    Dernier message: 02/09/2020, 09h04
  2. Réponses: 0
    Dernier message: 19/05/2009, 15h13
  3. Fonction de conversion des chiffres
    Par dok flint dans le forum IHM
    Réponses: 3
    Dernier message: 04/03/2009, 11h35
  4. Rentrer des chiffres commencant par un 0 sans le perdre.
    Par sebastien_oasis dans le forum IHM
    Réponses: 2
    Dernier message: 20/08/2007, 18h14
  5. Réponses: 10
    Dernier message: 23/10/2006, 09h43

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