[ Foro de C++ ]

Redondear decimales

19-Jul-2014 20:00
Invitado (wind)
3 Respuestas

Saludos cordiales.

Busco un comando en C++  que me permita redondear la parte decimal, es decir.

Si el usuario ingresa: 1.65
El resultado debe ser: 1.7

Utilizo Visual Studio. ¿Qué librería y que función debo usar?


19-Jul-2014 21:30
Nacho Cabanes (+31)

Hay detalles que no quedan claros: ¿quieres guardar el resultado con un decimal o quieres mostrar sólo un decimal, pero conservar el número con todo su detalle?

Si quieres conservar el número como es, pero mostrarlo con un decimal, puedes hacer lo siguiente si usas la sintaxis de C++:

 
#include <iomanip>
cout << fixed << setprecision(1) << 9.09090901 << endl;
 


o bien esto si usas la sintaxis de C:

 
printf("%.2lf", num);
 


Y si no es para pantalla de modo texto, sino para fichero o para modo gráfico, puedes guardarlo en una cadena usando "sprintf".

Si, por el contario quieres que el número quede almacenado con una única cifra de precisión (algo que nunca se puede garantizar al 100& por la forma en la que se almacenan en un ordenador los números en coma flotante), un truco es multplicar por 10, quedarte la parte entera y volver a dividir por 10, así:
siguiente si usas la sintaxis de C++

 
n*=10;
ceil(n);
n/=10;
 



20-Jul-2014 02:17
Invitado (wind)

Gracias Profesor Nacho. Utilicé lo siguiente, funciona muy bien:

 
#include <iomanip>
cout << fixed << setprecision(1) << 9.09090901 << endl;
 



Mi programa está en modo consola.

Ahora otra pregunta:

Busco ingresar números decimales usando la coma decimal (,) y no con el punto.
¿Qué debo agregar en mi programa?

 
// sumar 3.cpp : Defines the entry point for the console application.
//
 
#include <stdafx.h>
#include <iostream>
#include <windows.h>
#include <iomanip>
 
using namespace std;
 
float primernumero;
float segundonumero;
float suma;
 
int main()
{
	locale::global(locale("spanish"));
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15); // color blanco
	do
	{
	cout << "Ingrese un número: ";
	cin >> primernumero;
 
	cout << "Ingrese otro número: ";
	cin >> segundonumero;
 
	suma = primernumero + segundonumero;
 
	cout << "El resultado es: " << fixed << setprecision(1) << suma << endl;
	cout << "Presione Enter para ingresar más datos.\n";
	}
	while ( suma == suma);
	cin.ignore().get();
	return 0;
}
 



20-Jul-2014 13:21
Nacho Cabanes (+31)

La solución habitual es leer como cadena de texto y posteriormente reemplazar la coma por punto o viceversa, según si estás leyendo o escribiendo. En algunos lenguajes existe una función "replace" que cambia un carácter por otro, pero el "replace" de C++ no hace eso, sino que tendrás que recorrer la cadena con un "for", analizando letra letra.

En cada vez más lenguajes es habitual también que, si el sistema operativo lo permite y la configuración local es la correcta, se puedan introducir los números directamente con coma (es lo que ocurre en C# si el sistema operativo está en español, por ejemplo).






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)