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

  FORUM HardWare.fr
  Programmation

  [DELPHI] Fonction "Round" donne un résultat bizarre...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[DELPHI] Fonction "Round" donne un résultat bizarre...

n°107995
Maldoror
Carpe diem, tu vas mourir
Posté le 05-03-2002 à 20:23:12  profilanswer
 

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+


---------------
Nous ne sommes rien, nous n'allons vers rien. Profitons au moins du voyage !
mood
Publicité
Posté le 05-03-2002 à 20:23:12  profilanswer
 

n°107998
skylight
Made in France.
Posté le 05-03-2002 à 20:32:02  profilanswer
 

heu, en delphi, la fonction round accepte un argument je crois (nb de décimales)
tu devrai tenter de mettre cet argument a 0

n°107999
Maldoror
Carpe diem, tu vas mourir
Posté le 05-03-2002 à 20:40:20  profilanswer
 

Non, round n'accepte malheureusement aucun argument.
il arrondi à 0 décimales, mais un peu n'importe comment...


---------------
Nous ne sommes rien, nous n'allons vers rien. Profitons au moins du voyage !
n°108020
antp
Super Administrateur
Champion des excuses bidons
Posté le 05-03-2002 à 21:34:12  profilanswer
 

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]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°108027
Maldoror
Carpe diem, tu vas mourir
Posté le 05-03-2002 à 21:48:21  profilanswer
 

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 :/


---------------
Nous ne sommes rien, nous n'allons vers rien. Profitons au moins du voyage !
n°108140
Maldoror
Carpe diem, tu vas mourir
Posté le 06-03-2002 à 09:57:09  profilanswer
 

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


---------------
Nous ne sommes rien, nous n'allons vers rien. Profitons au moins du voyage !
n°108148
antp
Super Administrateur
Champion des excuses bidons
Posté le 06-03-2002 à 10:06:31  profilanswer
 

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]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°108170
Maldoror
Carpe diem, tu vas mourir
Posté le 06-03-2002 à 10:39:18  profilanswer
 

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+


---------------
Nous ne sommes rien, nous n'allons vers rien. Profitons au moins du voyage !
n°108185
antp
Super Administrateur
Champion des excuses bidons
Posté le 06-03-2002 à 11:02:10  profilanswer
 

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 :/


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [DELPHI] Fonction "Round" donne un résultat bizarre...

 

Sujets relatifs
[Delphi] POO[javascript encore] existil une fonction similaire au clrscr();
[Javascript / Perl] modifier une variable Perl dans une fonction JS[PHP] Expression Reguliere fonction ereg()
[Delphi - kylix] declarations :/Composant réseau Delphi !
[Delphi] 2 questions très naze mais qui m'énervent !!![Delphi] lire les valeurs REG_MULTI_SZ dans la base de registre ?
[Delphi] bloquer le port 80[KYLIX] declaration d'une fonction
Plus de sujets relatifs à : [DELPHI] Fonction "Round" donne un résultat bizarre...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR