2009-04-28 9 views
11

Je suis nouveau en C++. J'ai variable double double a=0.1239857 Je veux limiter la variable a du point virgule deux digits.So a sera 0.12. Je sais que C++ a des fonctions qui retournent le plus grand ou le plus petit entier qui est plus grand ou plus petit que a comme ceil ou floor.Is-il une fonction qui implémente la limitation de nombre de variable à virgule flottante? Ou Comment puis-je changer la précision de la variable a?limitation des chiffres du point décimal en C++

Cordialement ...

+0

En utilisant std :: fixés comme indiqué dans cette réponse entraînerait le format requis http://stackoverflow.com/questions/5907031/printing-the -correct-number-of-decimal-points-with-cout –

Répondre

3

Que voulez-vous dire que vous voulez limiter la variable? La valeur ou son formatage. Pour la valeur, vous pouvez utiliser floor + division. Quelque chose comme:

double a = 0.12123 
double b; 

b = floor(a * 100)/100 
6

Cela se traduira par deux chiffres après la décimale.

a = floor(a * 100.0)/100.0; 
+0

Bien que non demandé par OP: Notez que lors de l'impression 'a' il n'est pas garanti d'afficher seulement 2 chiffres. Il y aura des erreurs d'arrondi. – AbdealiJK

18

Êtes-vous en train d'essayer d'arrondir le nombre, ou simplement changer sa précision affichée?

Pour les premiers (tronquer les chiffres supplémentaires):

double scale = 0.01; // i.e. round to nearest one-hundreth 
value = (int)(value/scale) * scale; 

ou (arrondi vers le haut/bas, selon le cas, par la réponse de jheriko)

double scale = 0.01; // i.e. round to nearest one-hundreth 
value = floor(value/scale + 0.5) * scale; 

Pour ce dernier:

cout << setprecision(2) << value; 

où le paramètre setprecision() est le nombre maximal de chiffres à afficher après le point décimal.

+0

Notez que lorsque vous utilisez setprecision sur un flux comme vous le montrez, il sera également arrondi. –

+0

Brian - veuillez élaborer. Bien sûr, cela affichera la valeur arrondie au nombre d'emplacements approprié, mais elle ne changera pas la valeur réellement stockée dans la variable. – Alnitak

+0

La valeur sera arrondie à la précision appropriée lors de l'affichage sur cout. Bien sûr, cela n'a aucun effet sur la valeur de la variable. –

1

Si vous voulez juste à la sortie de la valeur, vous pouvez faire quelque chose comme

printf("%.3f", a); // Output value with 3 digits after comma 

Si vous voulez convertir la valeur elle-même, vous pouvez faire:

a = (int)(a * 1000)/1000.0f; 

Notez que les deux font pas arrondi, ils tronquent juste la valeur.

1

Vous pouvez définir la précision sur un flux, par ex.

double d = 3.14579; 
cout.precision(2); 
cout << d << endl; 

// Or use a manipulator 

#include <iomanip> 
cout << setprecision(2) << d << endl; 

Notez que lorsque vous envoyez un double ou flotter à un flux comme celui-ci, il arrondit automatiquement pour vous (ce qui peut vous faire trébucher parfois si vous n'êtes pas au courant de cela).

1

Une solution d'arrondi réelle serait x = floor(100*x + 0.5)/100; en supposant que la valeur à arrondir est dans une variable "x".

Le x = floor(100*x)/100; recommandé par d'autres ici tronquera le nombre à 2dp à la place.

+0

Je ne comprenais pas le niveau de ligne (100 * x + 0.5)/100 – Kapil

1

vous pourriez aussi faire quelque chose comme ceci:

//This code will ask the user for an input, set the decimal precision to the hundredths place, and add 4.63 to the inputted variable 

int banana; 
cin >> banana; 
cout << setprecision(2) << fixed << banana + 4.63; 
Questions connexes