Necesito ayuda para mantener la precisión de double
. Si asigno un literal a un doble, el valor real se truncó.¿Cómo 'cout' el número correcto de lugares decimales de un valor doble?
int main() {
double x = 7.40200133400;
std::cout << x << "\n";
}
Para el fragmento de código anterior, la salida fue 7.402
¿Hay una manera de prevenir este tipo de truncamiento? ¿O hay una forma de calcular exactamente cuántos puntos flotantes para un double
? Por ejemplo, number_of_decimal(x)
daría 11, ya que la entrada es desconocida en tiempo de ejecución, así que no puedo usar setprecision()
.
creo que debería cambiar mi pregunta: Cómo convertir un doble con 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";
}
La salida esperada debe ser 7.40200 pero el resultado real fue 7.402. Entonces, ¿cómo puedo solucionar este problema? ¿Alguna idea?
"El resultado esperado": el problema está con sus expectativas. "7.40200 pero el resultado real fue 7.402" - esos son iguales, por lo que nada fue "truncado". cout no puede saber cuántos ceros escribió en su archivo fuente. –
Consulte [this] (http://www.cplusplus.com/reference/iostream/ios_base/precision/) para precisión de coma flotante. – Benoit