# Un arrondis en C ?



## grumff (15 Octobre 2002)

Quelqu'un pourrait-il me dire comment on arrondis un nbre à virgule en C ?

meuhrci /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/wink.gif


----------



## WS95000 (15 Octobre 2002)

<blockquote><font class="small">Post&eacute; &agrave; l'origine par grumff:</font><hr />* Quelqu'un pourrait-il me dire comment on arrondis un nbre à virgule en C ?
*<hr /></blockquote>
Si tu sais répondre à la question "comment arrondir un nbre à virgule tout court", tu as la réponse.


----------



## gogo (15 Octobre 2002)

Hi,

tu as:

double floor (double x) 
float floorf (float x) 
long double floorl (long double x) 
These functions round x downwards to the nearest integer, returning that value as a double. Thus, floor (1.5) is 1.0 and floor (-1.5) is -2.0. 


ou 

double round (double x) 
float roundf (float x) 
long double roundl (long double x) 
These functions are similar to rint, but they round halfway cases away from zero instead of to the nearest even integer. 


fonctions de la libc 

essaie 'man round' avec le terminal


----------



## grumff (16 Octobre 2002)

&gt;Si tu sais répondre à la question "comment arrondir un nbre à virgule tout court", tu as la réponse. 

ca veut dire que faut que j'm'écrive la fonction moi même ca ? Pourquoi pas mais j'espèrais plus simple... C'est qd même le genre de trucs dont on s'sert souvent...

Pour les fonctions round, manifestement ca arrondi qu'à un nombre entier... La fonction accèpte un seul argument... (contrairement à php4 qu'a la même /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/frown.gif)
L'objectif pour l'instant c'est d'afficher que deux chiffres après la virgule (mais arrondis pas tronqués) sur un convertisseur euro en objective-c...

Autre question au passage, pour faire un random on fait comment ? A la fac ils nous ont filé une méthode dégueulasse avec une fonction d'une bibliothèque propre à borland c++ (le prog de merde par exellence) alors je préfèrerais éviter ca...


----------



## grenoble (16 Octobre 2002)

moi j'aurais fait un espèce de truc comme ça pour un arrondi à 2 chiffres après la virgule:

(int)(monresultat *1000) / 1000

en gros tu prends ton résultat, disons 123.456789 que tu multiplie par 1000 = 123456.789 et la, tu ne gardes plus que la partie entière en transtypant ton résultat (qui était soit un float, soit un double).
puis tu redivise par 1000 pour retrouver 2 chiffres après la virgule.

ça t'aide?


----------



## grumff (18 Octobre 2002)

Vouaip j'voualis plus simple c'est tout, j'avais essayé ca mais le problème c'est que qd on redivise par 100 (faut pas que ca soit en int déjà sinon j'aurais rien après la virgule et je veux deux chiffre évidemment), et la division par 100 l'ordi fait des erreurs de calcul si bien que ca m'affiche 8 décimals où y'a des cochoneries après la 8e...

pour le random pas d'idées ? /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/frown.gif


----------



## SuperCed (22 Octobre 2002)

Trop facile...

x = ((float)(((int)x)*1000/10))/100.0;


----------



## grumff (23 Octobre 2002)

J'essayerais, merci /ubbthreads/http://forums.macg.co/vbulletin/images/smiliesold/wink.gif

(qd j'pose une question j'devrais au moins avoir la politesse de passer plus souvent lire les réponses, toutes mes excuses)


----------

