Calcul sur les décimales
Calcul sur les décimales
Bonsoir
j'ai des additions(des *,/) à faire sur 4000 à 5000 nombres et quand j'additionne 12.47+56.37+15.45+3.03 j'attend 84.32 et Pb me donne 83.Quelle méthode dois je employer ?j'ai beau lire je ne trouve rien .Surement le Ba Ba pour vous mais moi rien de valable .Merci à celui qui vas m'aider.
j'ai des additions(des *,/) à faire sur 4000 à 5000 nombres et quand j'additionne 12.47+56.37+15.45+3.03 j'attend 84.32 et Pb me donne 83.Quelle méthode dois je employer ?j'ai beau lire je ne trouve rien .Surement le Ba Ba pour vous mais moi rien de valable .Merci à celui qui vas m'aider.
Re: Calcul sur les décimales
Code : Tout sélectionner
Debug 12.47+56.37+15.45+3.03
; resultat : 87.320000000000007
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Calcul sur les décimales
avec la fonction debug bien sur que ça fonctionne SPH
@ach : utilise la fonction StrF()
https://www.purebasic.com/french/docume ... /strf.html
@ach : utilise la fonction StrF()
https://www.purebasic.com/french/docume ... /strf.html
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Calcul sur les décimales
Code : Tout sélectionner
variable.f = 12.47+56.37+15.45+3.03
Debug variable
Debug StrF(variable)
; j'obtiens 87.32
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Calcul sur les décimales
@SPH : Je suis d'accord le résultat est le même. Mais pour transférer le résultat dans un TextGadget par exemple, c'est la fonction StrF() que tu dois utiliser.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Calcul sur les décimales
Il ne le precise pasfalsam a écrit :Mais pour transférer le résultat dans un TextGadget par exemple, c'est la fonction StrF() que tu dois utiliser.
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Re: Calcul sur les décimales
Je vous joint un exemple de mon mauvais code qui ne fonctionne pas
Code : Tout sélectionner
Structure Achats
Mois.s
Categories.s
Articles.s
Prix.f
EndStructure
Dim Budjet.Achats(6)
Budjet(0)\Mois="Janvier"
Budjet(0)\Categories="Animaux"
Budjet(0)\Articles="Paté chats"
Budjet(0)\Prix=22.95
Budjet(1)\Mois="Janvier"
Budjet(1)\Categories="Boulangerie"
Budjet(1)\Articles="Pain"
Budjet(1)\Prix=11.60
Budjet(2)\Mois="Janvier"
Budjet(2)\Categories="Bricolage"
Budjet(2)\Articles="Petrole"
Budjet(2)\Prix=15.97
Budjet(3)\Mois="Fevrier"
Budjet(3)\Categories="Boulangerie"
Budjet(3)\Articles="Pain"
Budjet(3)\Prix=5.20
Budjet(4)\Mois="Fevrier"
Budjet(4)\Categories="Boulangerie"
Budjet(4)\Articles="Pain"
Budjet(4)\Prix=15.35
OpenConsole()
For n=0 To 4
If Budjet(n)\Mois="Janvier"
som=som+Budjet(n)\Prix
EndIf
Next n
For n=0 To 4
If Budjet(n)\Mois="Janvier" And Budjet(n)\Categories="Boulangerie"
som_2=Strsom_2+Budjet(n)\Prix
EndIf
Next n
For t=0 To 4
If Budjet(t)\Mois="Fevrier"
som_3=som_3+Budjet(t)\Prix
EndIf
Next t
For t=0 To 4
If Budjet(t)\Categories="Boulangerie"
som_4= som_4+Budjet(t)\Prix
EndIf
Next t
som$=StrF(som)
som_2$=StrF(som_2)
som_3$=StrF(som_3)
som_4$=StrF(som_4)
PrintN ("Résultat de Janvier: " + som$)
Print ("")
PrintN ("Résultat de Fevrier: " +som_3$ )
PrintN ("")
PrintN ("Boulangerie de Janvier = " + som_2$)
PrintN ("")
PrintN ("Boulangerie Janvier et Fevrier= " + som_4$)
Input()
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Calcul sur les décimales
C'est normal tu ne déclares pas tes variables. Attention à ta méthode de programmation.
Define som.f
Define som_2.f
Define som_3.f
Define som_4.f
En début de code place systématiquement Tu verras toutes les variables non déclarées.
Define som.f
Define som_2.f
Define som_3.f
Define som_4.f
Code : Tout sélectionner
Structure Achats
Mois.s
Categories.s
Articles.s
Prix.f
EndStructure
Dim Budjet.Achats(6)
Budjet(0)\Mois="Janvier"
Budjet(0)\Categories="Animaux"
Budjet(0)\Articles="Paté chats"
Budjet(0)\Prix=22.95
Budjet(1)\Mois="Janvier"
Budjet(1)\Categories="Boulangerie"
Budjet(1)\Articles="Pain"
Budjet(1)\Prix=11.60
Budjet(2)\Mois="Janvier"
Budjet(2)\Categories="Bricolage"
Budjet(2)\Articles="Petrole"
Budjet(2)\Prix=15.97
Budjet(3)\Mois="Fevrier"
Budjet(3)\Categories="Boulangerie"
Budjet(3)\Articles="Pain"
Budjet(3)\Prix=5.20
Budjet(4)\Mois="Fevrier"
Budjet(4)\Categories="Boulangerie"
Budjet(4)\Articles="Pain"
Budjet(4)\Prix=15.35
OpenConsole()
Define som.f
For n=0 To 4
If Budjet(n)\Mois="Janvier"
som=som+Budjet(n)\Prix
EndIf
Next n
Define som_2.f
For n=0 To 4
If Budjet(n)\Mois="Janvier" And Budjet(n)\Categories="Boulangerie"
som_2=Strsom_2+Budjet(n)\Prix
EndIf
Next n
Define som_3.f
For t=0 To 4
If Budjet(t)\Mois="Fevrier"
som_3=som_3+Budjet(t)\Prix
EndIf
Next t
Define som_4.f
For t=0 To 4
If Budjet(t)\Categories="Boulangerie"
som_4= som_4+Budjet(t)\Prix
EndIf
Next t
som$ = StrF(som, 2)
som_2$ = StrF(som_2, 2)
som_3$ = StrF(som_3, 2)
som_4$ = StrF(som_4, 2)
PrintN ("Résultat de Janvier: " + som$)
Print ("")
PrintN ("Résultat de Fevrier: " +som_3$ )
PrintN ("")
PrintN ("Boulangerie de Janvier = " + som_2$)
PrintN ("")
PrintN ("Boulangerie Janvier et Fevrier= " + som_4$)
Input()
Code : Tout sélectionner
EnableExplicit
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Calcul sur les décimales
Merci Falsam
Je me doutais bien que PB n'avais pas cette lacune mais je me suis bien pris la tête avec cela.
j'ai encore du boulot pour apprendre les bases...
encore merci
Je me doutais bien que PB n'avais pas cette lacune mais je me suis bien pris la tête avec cela.
j'ai encore du boulot pour apprendre les bases...
encore merci
Re: Calcul sur les décimales
falsam a écrit :C'est normal tu ne déclares pas tes variables. Attention à ta méthode de programmation.
heu... en Purebasic , on ne declare pas les Variables !!
c'est une remarque que j'ai deja fait LOL
la doc :
ce n'est pas la meme chose !Define.<type> [<variable> [= <expression>], <variable> [= <expression>], ...]
:
Permet d'assigner le même type de données à une série de variables.
il ne s'agit pas d'une "declaration" mais d'une definition de type
Code : Tout sélectionner
Define.q a, b.w, c, d ; a, c, et d sont des Quad (.q) alors que b est un Word (.w)
pour definir un type pour une variable , il suffit lors de sa premiere utilisation de mettre le type qu'on veux
exemple :
a.L = 10 ; <--- première utilisation d'une nouvelle variable avec le nom "a" et le type "L" (long) ... (elle est donc declaré au moment ou on l'utilise )
perso , je conseille d'utiliser une variable systématiquement en ecrivant le type ...
a.l restera ecrit "a.l" quelque soit sont utilisation , cela evite les soucis , une variable devrai toujours avoir sont type dans le nom n'importe ou dans le code
et c'est mieux lisible, puisqu'on lit le type lorsqu'on tombe sur la variable dans le code , un coup d'oeil suffit
(mais c'est pas obligatoire... juste un conseil )
EnableExplicit
Tu verras toutes les variables non déclarées.
a propos de EnableExplicite , la doc est tres mal ecrite je trouve .....
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Calcul sur les décimales
On peut préciser que sans définition, une variable est considérée comme integer (d'où l'erreur courante avec les décimaux)
Voir ici
https://www.purebasic.com/french/docume ... ables.html
Savoir aussi (mais c'est mis dans l'aide) que A.s ou A$ sont valables pour déclarer une chaine (et sont deux identifiants différents). Perso je mets maintenant toujours le suffixe $ « à l'ancienne » car c'est plus explicite.
Et effectivement EnableExplicite, même si ça ajoute du boulot, permet de ne pas en perdre ensuite beaucoup par de simples fautes de frappe.
Voir ici
https://www.purebasic.com/french/docume ... ables.html
Savoir aussi (mais c'est mis dans l'aide) que A.s ou A$ sont valables pour déclarer une chaine (et sont deux identifiants différents). Perso je mets maintenant toujours le suffixe $ « à l'ancienne » car c'est plus explicite.
Et effectivement EnableExplicite, même si ça ajoute du boulot, permet de ne pas en perdre ensuite beaucoup par de simples fautes de frappe.
Re: Calcul sur les décimales
Salut a tous
Zorro tu as parfaitement raison.
J'ai même abandonner depuis longtemps l'utilisation de l'énumération automatique. Car je trouve que cela est une source de confusion.
@ Marc 56 ok c'est une une méthode avec avantages et inconvénients.
Zorro tu as parfaitement raison.
J'ai même abandonner depuis longtemps l'utilisation de l'énumération automatique. Car je trouve que cela est une source de confusion.
@ Marc 56 ok c'est une une méthode avec avantages et inconvénients.
- microdevweb
- Messages : 1800
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: Calcul sur les décimales
Pour plus de précision tu peux également utilisé un double au lieu d'un float.
Et je suis comme falsam, je commence toujours par EnableExplicit, et dans mes procédures Protected. On a vite fait une faute de frape et retrouver ce type de bug peut être galère.
Edit: Attention également à la priorité des opérateurs:
Dans ton code tu as
ce qui donne la somme + (Budget(n)\Prix)
Si tu veux diviser le somme + le Budget, tu dois les placer entre parenthèses.
Et je suis comme falsam, je commence toujours par EnableExplicit, et dans mes procédures Protected. On a vite fait une faute de frape et retrouver ce type de bug peut être galère.
Edit: Attention également à la priorité des opérateurs:
Dans ton code tu as
Code : Tout sélectionner
som=som+Budjet(n)\Prix
Si tu veux diviser le somme + le Budget, tu dois les placer entre parenthèses.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège