problème de décimale

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

problème de décimale

Message par kwandjeen »

Bonjour je limite mes décimales à 2 chiffres après la virgule et je constate un petit bug ou une erreur de ma part peut être.

Lorsque mon nombre vaut 123.1 alors la PB affecte la valeur 123.0999999999 c'est un peu gênant.

123.11 fonctionne bien par contre

en fait j'ai besoin de limiter en décimale et ma fonction tombe à l'eau à cause de ceci.

Code : Tout sélectionner

Procedure.d nb_decimale(nombre.d,nb_dec.l)
Protected valeur.d
  If nb_dec>0
    valeur = (Int(nombre*(Pow(10,nb_dec))))/(Pow(10,nb_dec))
  Else
    valeur = Int(nombre)
  EndIf
ProcedureReturn valeur
EndProcedure

For i=0 To 5
  Debug nb_decimale(123.12345,i)
Next
J'ai du louper un truc, j'attends vos conseils :D
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Message par kwandjeen »

Bon je vais me débrouiller avec les string comme ça concerne l'affichage de temps dans un tableau.

Code : Tout sélectionner

Procedure.s nb_decimale(nombre.d,nb_dec.l)
Protected valeur.s
  If nb_dec>0
    valeur = StrD(Int(nombre*(Pow(10,nb_dec)))/(Pow(10,nb_dec)))
    position = FindString(valeur,".",1)
    valeur = Left(valeur,position+nb_dec)
  Else
    valeur = Str(Int(nombre))
  EndIf

ProcedureReturn valeur
EndProcedure

For i=0 To 5
  Debug nb_decimale(123.1,i)
Next
Mais s'il y a des explication je suis preneur :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Code : Tout sélectionner

For i=0 To 5
  Debug StrF(123.1,i)
Next
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Ca n'est pas un bug de PB, c'est une limitation matérielle des microprocesseurs en général, qui ne peuvent faire avec le binaire qu'une approximation des nombres flottants (à virgules). On en a déjà parlé très souvent, et c'est dans la doc. Il est cependant possible d'augmenter la précision de multiples façons.
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Message par kwandjeen »

Merci comtois j'aurai du chercher un peu mieux dans la doc ^^.

C'était bien une question c.. mais ça anime le forum :oops:
Répondre