Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

conversion float en int

5 réponses
Avatar
Akeu
Bonjour,
Il me semble qu'il existe une commande pour convertir un flottant en
integer au plus pres car le forcage A=(int) B; ne marche pas
1.2 rend 1
1.7 rend 2
-1.2 rend -1
-1.7 rend -2

5 réponses

Avatar
Jean-Marc Bourguet
Akeu writes:

Bonjour,
Il me semble qu'il existe une commande pour convertir un flottant en
integer au plus pres car le forcage A=(int) B; ne marche pas
1.2 rend 1
1.7 rend 2
-1.2 rend -1
-1.7 rend -2


Si tu as des bibliotheques C99:

double round(double);

Sinon utilise floor(x+0.5).

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Akeu
floor , mais c'est bien sur , j'avais oublié

Le Thu, 20 Sep 2007 13:56:00 +0200, Jean-Marc Bourguet a écrit :

Akeu writes:

Bonjour,
Il me semble qu'il existe une commande pour convertir un flottant en
integer au plus pres car le forcage A=(int) B; ne marche pas 1.2 rend 1
1.7 rend 2
-1.2 rend -1
-1.7 rend -2


Si tu as des bibliotheques C99:

double round(double);




Sinon utilise floor(x+0.5).

A+



Avatar
Jean-Marc Bourguet
fred writes:


floor , mais c'est bien sur , j'avais oublié
rint ?



Ce que fait rint depend du mode d'arrondi en vigueur.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Jean-Marc Bourguet
fred writes:


fred writes:


floor , mais c'est bien sur , j'avais oublié
rint ?



Ce que fait rint depend du mode d'arrondi en vigueur.
Et quel est le mode d'arrondi en vigueur en l'occurrence ?

Ça dépend de quoi ?


De ce que le programme a mis avec les fonctions de fenv.h.

A+

--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org




Avatar
Vincent Lefevre
Dans l'article ,
Jean-Marc Bourguet écrit:

Si tu as des bibliotheques C99:

double round(double);

Sinon utilise floor(x+0.5).


Attention, suivant la méthode utilisée, on n'obtient pas la même
chose pour les demi-entiers. Et puis attention aux arrondis:

ay:~> cat tst.c
#include <stdio.h>
#include <math.h>
int main (void)
{
double x;
for (x = 0.5; x <= 3.5; x += 1.0)
{
double y = nextafter (x, 0.0);
printf ("%-20.17g %g %g %gn",
y, round (y), floor (y + 0.5), rint (y));
printf ("%-20.17g %g %g %gn",
x, round (x), floor (x + 0.5), rint (x));
}
return 0;
}
ay:~> c99 -Wall -O2 tst.c -o tst -lm
ay:~> ./tst
0.49999999999999994 0 1 0
0.5 1 1 0
1.4999999999999998 1 1 1
1.5 2 2 2
2.4999999999999996 2 2 2
2.5 3 3 2
3.4999999999999996 3 3 3
3.5 4 4 4

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)