2009-04-28 82 views
11

Soy nuevo en C++. Tengo variable doble double a=0.1239857 que quieren limitar la variable a desde el punto decimal dos digits.So a será 0.12. Sé que C++ tiene funciones que devuelven el entero más grande o más pequeño que es mayor o menor que a como ceil o floor.Is hay una función que implementa la limitación de dígitos de la variable de coma flotante? ¿O cómo puedo cambiar la precisión de la variable a?limitación dígito desde el punto decimal en C++

Saludos ...

+0

El uso de std :: fija como se muestra en esta respuesta resultaría en el formato requerido http://stackoverflow.com/questions/5907031/printing-the -correcto-número-de-puntos-decimales-con-cout –

Respuesta

3

¿Qué quiere decir por usted quiere limitar la variable? El valor o su formateo. Para el valor, puede usar piso + división. Algo como:

double a = 0.12123 
double b; 

b = floor(a * 100)/100 
6

Esto dará como resultado dos dígitos después del lugar decimal.

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

Aunque OP no lo haya preguntado: tenga en cuenta que al imprimir 'a' no se garantiza que muestre solo 2 dígitos. Tendrá errores de redondeo. – AbdealiJK

18

¿Estás tratando de redondear el número o simplemente cambiar la precisión mostrada?

En el primer caso (truncando los dígitos adicionales):

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

o (redondeo hacia arriba/abajo en su caso, por la respuesta de jheriko)

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

Para este último:

cout << setprecision(2) << value; 

donde el parámetro setprecision() es la cantidad máxima de dígitos para mostrar después del punto decimal.

+0

Tenga en cuenta que cuando usa setprecision en una secuencia como la que muestra, también redondeará. –

+0

Brian - elabora. Claro, mostrará _el valor redondeado hacia arriba o hacia abajo al número apropiado de lugares, pero no cambiará el valor realmente almacenado en la variable. – Alnitak

+0

El valor se redondeará a la precisión adecuada en la pantalla para mostrar. Por supuesto, no tiene ningún efecto sobre el valor en la variable. –

1

Si lo que desea es el valor de salida, se puede hacer algo como

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

Si desea convertir el valor en sí, que puede hacer:

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

Tenga en cuenta que ambos hacen sin redondeando, simplemente truncan el valor.

1

Puede establecer la precisión de una secuencia, p. Ej.

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

// Or use a manipulator 

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

Tenga en cuenta que cuando se envía un doble o flotar a una corriente de este tipo, se redondeará automáticamente para usted (que puede tropezar a veces, si usted no es consciente de esto).

1

Una solución de redondeo real sería x = floor(100*x + 0.5)/100; suponiendo que el valor que se redondeará está en una variable "x".

El x = floor(100*x)/100; recomendado por otros aquí en realidad truncará el número a 2dp en su lugar.

+0

no pude entender linefloor (100 * x + 0.5)/100 – Kapil

1

que también podría hacer algo como esto:

//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; 
Cuestiones relacionadas