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

PureBasic Discussion :

La somme de nombres à 2 décimaux?


Sujet :

PureBasic

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 37
    Points
    37
    Par défaut La somme de nombres à 2 décimaux?
    Bonjour,

    Depuis quelques temps déjà, je remarque que la somme de mes nombres à 2 décimaux est fausse (pas toujours mais souvent), le problème c'est que


    1. quand je saisis par exemple 226.24 dans un string, au moment où je l'affiche dans un grid (listicongadget), le nombre affiché sera: 226.23 et non pas 226.24

    2. Même quand la grille est bien remplie, la somme des nombres n'est pas correcte (il y a toujours 1 centime de plus ou de moins). La somme des nombres est affichée en bas après le grid dans un string.


    Il faut savoir au fait que ces nombres sont des montants qui sont enregistrés dans un fichier (sqlite), le nom du champ est MntDebit, le type du champ est FLOAT (il était REEL mais à cause de ce problème, j'ai changé le type), mais le problème persiste. Finalement, en résumé, voici ce que je veux savoir:

    Existe t -il une méthode plus simple me permettant de ne garder dans le fichier que le nombre à 2 décimaux et quand je fais les totaux, il ne prendra que les 2 décimaux en compte (le float en prend plusieurs): Voici enfin le code de calcul:

    Wsql="SELECT SUM(MntDebit) FROM MaTable"
    CheckDataBaseQuery(Wsql,0)
    if nextDataBaseRow(0)
    Wmnt.f=getdatabaseFloat (0,0)
    endif

    (J'ai aussi essayé Wmnt$=getdatabaseString (0,0) )

    Dans les deux cas, ça marche, le total est fait mais toujours le problème de centime (1 centime de plus ou de moins).

    Je veux que les montants affichés sur le grid donnent un total exact (en tenant compte des deux décimaux).

    exemple:

    sur la grille (c'est le contenu de la table aussi) j'ai:

    en 1ère ligne : 22.24
    en 2ème ligne: 10.15


    sur le string (Total) j'obtiens: 32.40 alors que normalement je devais obtenir
    32.39

    Merci de votre aide

    Fadila

  2. #2
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 262
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 262
    Points : 9 981
    Points
    9 981
    Billets dans le blog
    8
    Par défaut
    Les nombres flottants ne sont pas précis. C'est d'ailleurs indiqué dans la doc
    Regarde en bas de page le chapitre Informations concernant les nombres flottants.

    Utilise des entiers :
    en 1ère ligne : 2224
    en 2ème ligne: 1015

    Et de cette façon tu obtiendras bien ton 3239. Ensuite soit tu divises par 100 le résultat ou tu gères l'affiche en string en ajoutant la décimale.

    J'ignore comment procède ceux qui développent des applications financières à ce niveau là (à voir s'il existe une législation , des normes pour le calcul ou autres) ?

    Perso je resterais toujours avec des entiers, et pour l'affichage je passerais par des string formatés pour afficher la décimale.
    Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 37
    Points
    37
    Par défaut la somme des nbres à 2 décimaux
    Merci Comtois, mais j'ai déjà pensé aux entiers, seulement c'est un peu pénible car l'utilisateur doit saisir (souvent) un nbre à 2 décimaux dans un string (#MntDebit), d'après toi, je dois faire ceci:

    1. Enlever la virgule

    WMntDebit$=GetGadgetText(#MntDebit)
    WEntier=ValD(WMntDebit$) * 100
    WEntier$=StrD(WEntier)

    2. Enregistrer l'entier dans ma table (sqlite)

    Insert Into MaTable etc.. (WEntier$ --->MntDebit)

    3. Enfin pour totaliser mes mnts:

    Sql="Select SUM(MntDebit) from MaTable Where MntDebit<>0"

    (Résultat dans ---> Wtot)

    4. Convertir le total en string

    wTot$=strD((Wtot * 100),2)

    5. Afficher le total (nécessaire après chaque saisie)

    SetGadgetString(#TotMnt,wTot$)


    C'est bien ça? Si la réponse est oui, je doute sur ceci:

    WEntier=ValD(WMntDebit$) * 100

    J'ai bien peur d'obtenir une surprise ici, comme par exemple:

    Contenu du string de saisie = 232,89
    Contenu de Wentier:23290??? (j'ai déjà obtenu des trucs comme ça!!)

    Bon, je vais essayer ça, puis on verra...

    Merci comtois
    si tu as qq chose à ajouter (ou des suggestions ou remarques) , ce sera avec plaisir

    merci encore à tous

    Fadila

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 37
    Points
    37
    Par défaut Manipulation des nombres : Affaire réglée grâce à Mekkisoft
    Bonjour,

    ça y est, grâce à Mekkisoft, qui a eu la gentillesse de me transmettre toutes les fonctions qui permettent de régler définitivement la manipulation des nombres avec des décimaux, je n'ai plus de problème à présent. Ces fonctions permettent de convertir les strings (avec ou sans décimaux) en nombres (avec ou sans décimaux), le calcul se fera sur fichier d'une manière très rapide et facile et sans risque d'erreur de centimes..

    Je voudrais remercier Mekkisoft ainsi que tous les membres qui m'ont aidé, sans oublier Comtois et Gilels pour leurs précieux coups de main.

    fadila

  5. #5
    Responsable Purebasic

    Avatar de comtois
    Inscrit en
    Avril 2003
    Messages
    1 262
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 1 262
    Points : 9 981
    Points
    9 981
    Billets dans le blog
    8
    Par défaut
    Bonne nouvelle, la prochaine fois pense à utiliser le bouton "Résolu" qui se trouve en bas de tes messages
    Vous souhaitez participer à la rubrique PureBasic (tutoriels, FAQ, sources) ? Contactez-moi par MP.

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

Discussions similaires

  1. [XPath 1.0] Somme de nombres décimaux avec virgule
    Par djmalo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/05/2010, 11h19
  2. Procédure somme de nombres premiers
    Par neotrack dans le forum Maple
    Réponses: 1
    Dernier message: 04/05/2008, 11h37
  3. Excel somme de nombre rouge
    Par pavilion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/07/2007, 05h39
  4. Somme de nombre arrondis
    Par Lou_anne dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/05/2007, 16h22
  5. Somme de nombres limitée
    Par DC dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 29/11/2005, 13h54

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