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

Langage Delphi Discussion :

problème avec RoundTo (Delphi Xe3)


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut problème avec RoundTo (Delphi Xe3)
    Bonjour,

    J'ai le problème suivant. Pour le petit bout de code suivant :

    SetRoundMode(rmUp);
    a := roundto(10.02,-1):

    Avec Delphi 7, j'obtiens : 10.1
    Avec Delphi XE3, j'ai : 10.0

    Dans les aides respectives de Delphi 7 et Xe3, j'ai vu qu'ils avaient procédé à des modifications de la fonction "RoundTo", mais je n'ai remarqué concernant l'affectation "rmUp" à "SetRoundMode".

    Si je peux bénéficier des lumières de quelqu'un ...

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    On a eu un gros sujet sur RoundTo : roundto simperoundto currency arrondi incorrect

    Et ils ont changé le calcul d'arrondi en intégrant FastCode comme je le mentionne dans le sujet Utilisation de l'arrondi sur un calcul

    le code a tellement changé que RoundTo appel SetRoundMode et force rmNearest et donc ignore ton rmUp, voir si SimpleRoundTo le gère mieux !

    Tu peux aussi si tu as le code de Math.pas de D7 et de XE3 (Version Pro+), et faire une RoundToOld

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Ok. J'irai faire un tour demain sur liens que tu m'as donnés.
    Y a-t-il déjà un topic recensant de telles différences entre des fonctions sous XE3 et Delphi 7?

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 376
    Points : 3 154
    Points
    3 154
    Par défaut
    Bonjour,

    si ce problème de compatibilité se limite à ce problème d'arrondi, tu peux utiliser des fonctions plus basiques qui sont sûres de fonctionner avec D7 et XE3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       // arrondi à 0,1 par excés
       a := Trunc(10 * 10.02 +1 )/10; // ==> 10,1
       Showmessage(FloatToStr(a));
       // arrondi à 0,1 par défaut
       a := Trunc(10 * 10.02  )/10;   // ==> 10,0
       Showmessage(FloatToStr(a));
    A+

    Charly

  5. #5
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Bonjour,

    si ce problème de compatibilité se limite à ce problème d'arrondi, tu peux utiliser des fonctions plus basiques qui sont sûres de fonctionner avec D7 et XE3 :
    et pour 20 tout rond par excès ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       // arrondi à 0,1 par excés
       a := Trunc(10 * 20.00 +1 )/10; // ==> 20,1
       Showmessage(FloatToStr(a));
    c'est un sacré excès

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 376
    Points : 3 154
    Points
    3 154
    Par défaut
    Bonjour,

    effectivement, alors il faut bidouiller avec la fonction Round :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       a := Round(10 * b + 0.5  )/10;
    pas très propre !

    A+

    Charly

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2009
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Ok merci, comme j'avais besoin d'un arrondi au supérieur, j'ai utilisé un

    Ceil(10*a)/10

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

Discussions similaires

  1. Problème avec RAD studio XE3
    Par colorid dans le forum Langage
    Réponses: 4
    Dernier message: 17/01/2014, 18h04
  2. Problème avec WNetAddConnection2 (delphi 7.0)
    Par THONGSOUM dans le forum Web & réseau
    Réponses: 1
    Dernier message: 25/11/2009, 11h46
  3. Problème avec EditMask Delphi 7
    Par codial dans le forum Delphi
    Réponses: 10
    Dernier message: 25/10/2006, 12h40
  4. problème avec BDE delphi 3 et serveur windows 2003
    Par korntex5 dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/07/2006, 22h58
  5. [Delphi 3] Problème avec fichier ressource .RES
    Par delphim dans le forum EDI
    Réponses: 2
    Dernier message: 28/06/2005, 18h11

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