¿Cómo 'cout' el número correcto de decimales de un valor doble?
Necesito ayuda para mantener la precisión de undouble
. Si asigno un literal a un doble, el valor real se truncó.
int main() {
double x = 7.40200133400;
std::cout << x << "\n";
}
Para el fragmento de código anterior, la salida fue7.402
¿Hay alguna manera de prevenir este tipo de truncamiento? ¿O hay una manera de calcular exactamente cuántos puntos flotantes para undouble
? Por ejemplo,number_of_decimal(x)
daría 11, ya que la entrada es desconocida en tiempo de ejecución, por lo que no puedo usarsetprecision()
.
Creo que debería cambiar mi pregunta a: Cómo convertir un doble en una cadena sin truncar los puntos flotantes. es decir
#include <iostream>
#include <string>
#include <sstream>
template<typename T>
std::string type_to_string( T data ) {
std::ostringstream o;
o << data;
return o.str();
}
int main() {
double x = 7.40200;
std::cout << type_to_string( x ) << "\n";
}
El resultado esperado debería ser 7.40200 pero el resultado real fue 7.402. Entonces, ¿cómo puedo solucionar este problema? ¿Alguna idea?