Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2109 connectés 

 


Dernière réponse
Sujet : [DELPHI] Fonction "Round" donne un résultat bizarre...
antp bhen mon idée d'arrondi vient du source des fonctions de Delphi 6 donc il ne m'appartient pas vraiment :D
enfin je l'ai quand même modifié pcq y avait un bug avec les nombres négatif, et l'arrondi ne se faisait pas exactement comme il fallait le faire avec l'Euro :/

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
antp bhen mon idée d'arrondi vient du source des fonctions de Delphi 6 donc il ne m'appartient pas vraiment :D
enfin je l'ai quand même modifié pcq y avait un bug avec les nombres négatif, et l'arrondi ne se faisait pas exactement comme il fallait le faire avec l'Euro :/
Maldoror Ben là tu peux utiliser ta fonction pour arrondir au nombre de décimales que tu veux, effectivement dans ce cas ta fonction est très pertinente.
 
Moi mon cas est très simple : J'ai un montant à 0 décimales en Euros, je veux le convertir en un montant à 0 décimales en dollar.
 
Je n'ai nul besoin, DANS LE CADRE PRECIS DE CETTE APPLI DE GESTION, de préciser le nombre de décimales, il sera TOUJOURS égal à 0 ;)
 
Ceci étant dit, avec ta permission, je conserve ton idée d'arrondi dans un coin de mes archives ;)
 
A+
antp je crois qu'il y a plus simple et plus propre :/
 
ex de la fonction que j'ai dû faire pour un programme en Delphi 5 qui avait des problèmes d'arrondis et qui ne voulais pas compiler en Delphi 6 :

Code :
  1. type
  2.   TRoundToSERange = -37..37;
  3. function RoundToSE(const AValue: Double; const ADigit: TRoundToSERange = -2): Double;
  4. var
  5.   LFactor: Double;
  6. begin
  7.   LFactor := IntPower(10, ADigit);
  8.   if AValue > 0 then
  9.     Result := Trunc((AValue / LFactor) + 0.5) * LFactor
  10.   else if AValue < 0 then
  11.     Result := Trunc((AValue / LFactor) - 0.5) * LFactor
  12.   else
  13.     Result := 0;
  14. end;


 
(inspiré de la fonction SimpleRoundTo ou RoundTo, je sais plus, de Delphi 6
 
le second paramètre donne le nombre de chiffres à garder après la virgule.

 

[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]

Maldoror Bon ben voilà, j'ai fait comme ça :
 

Code :
  1. fonction Arrondi(NumeriqueEnChaine : String) : Longint ;
  2. var
  3.    PartieEntiere, PartieDecimale : String ;
  4.    i : Integer ;
  5. begin
  6. PartieEntiere := Copy(NumeriqueEnChaine, 1, (pos(DecimalSeparator, MaNumeriqueEnChaine) -1)) ;
  7. PartieDecimale := Copy(NumeriqueEnChaine, (pos(DecimalSeparator, MaNumeriqueEnChaine) +1), 2) ;
  8. i := StrToInt(PartieDecimale) ;
  9. Result := StrToInt(PartieEntiere) ;
  10. if i >= 50 then
  11.     Result := Result + 1 ;
  12. end;


 
Y avait peut-etre plus simple, mais bon ça marche :D

Maldoror

antp a écrit a écrit :

l'arrondi est logique
c'est l'arrondi "scientifique" et non monétaire.
Si decimale < .5 alors entier inferieur
Sinon si decimale > .5 alors entier superieur
Sinon si entier inferieur pair alors entier inferieur
Sinon entier superieur
 
c'est expliqué mieux que ça dans l'aide :D
 
pour ce que tu sembles vouloir, tu dois utiliser la fonction SimpleRoundTo je crois (n'existe que dans Delphi 6)  
 
 




 
Merci pour ces explications, pour mon cas personnel je cherche à appliquer l'arrondi comptable et non l'arrondi scientifique, donc je l'ai dans le cul...
 
Et comme je suis sous Delphi 5 je l'ai une deuxième fois dans le cul :crazy:
 
Bon ben j'vais m'faire une fonction d'arrondi alors :/

antp l'arrondi est logique
c'est l'arrondi "scientifique" et non monétaire.
Si decimale < .5 alors entier inferieur
Sinon si decimale > .5 alors entier superieur
Sinon si entier inferieur pair alors entier inferieur
Sinon entier superieur
 
c'est expliqué mieux que ça dans l'aide :D
 
pour ce que tu sembles vouloir, tu dois utiliser la fonction SimpleRoundTo je crois (n'existe que dans Delphi 6)

 

[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]

Maldoror Non, round n'accepte malheureusement aucun argument.
il arrondi à 0 décimales, mais un peu n'importe comment...
skylight heu, en delphi, la fonction round accepte un argument je crois (nb de décimales)
tu devrai tenter de mettre cet argument a 0
Maldoror Salut,
 
Si je fais un round d'une numérique valant 2.5, j'obtiens 2 et non 3 comme je le souhaiterais et comme ça semblerait logique (en tous cas dans la logique de l'arrondi financier)...
 
En fait, lorsque Delphi arrondi une valeur se trouvant exactement entre deux entiers, le résultat est toujours le nombre pair, allez donc savoir pourquoi :/
 
Dois-je me palucher l'arrondi à la mimine ou y-a-t'il un moyen de contourner ce problème afin d'obtenir un nombre arrondi correctement ?
 
Merci
A+

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)