Ho bisogno di aiuto per mantenere la precisione di un double
. Se assegno un letterale a un doppio, il valore effettivo è stato troncato.Come "cout" il numero corretto di posizioni decimali di un doppio valore?
int main() {
double x = 7.40200133400;
std::cout << x << "\n";
}
Per il frammento di codice di cui sopra, l'uscita era 7.402
C'è un modo per evitare questo tipo di troncamento? O c'è un modo per calcolare esattamente quanti punti mobili per un double
? Ad esempio, number_of_decimal(x)
restituirebbe 11, poiché l'input è sconosciuto in fase di esecuzione, quindi non è possibile utilizzare setprecision()
.
penso che dovrei cambiare la mia domanda: Come convertire un doppio a una stringa senza troncare i punti galleggianti. Ad esempio
#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";
}
L'uscita prevista dovrebbe essere 7,40200 ma il risultato effettivo era 7,402. Quindi, come posso aggirare questo problema? Qualche idea?
"L'output atteso" - il problema è con le vostre aspettative. "7.40200 ma il risultato effettivo era 7.402" - quelli sono uguali, quindi niente è stato "troncato". cout non può sapere quanti zeri hai digitato nel tuo file sorgente. –
Vedere [questo] (http://www.cplusplus.com/reference/iostream/ios_base/precision/) per la precisione in virgola mobile. – Benoit