Je ces trois chiffres:Comment analyser et de diviser un double en C++
double n1 = 1.1
double n2 = 1.10
double n3 = 1.101
et je me attends à les convertir en chaînes pour séparer les parties décimales pour les utiliser ailleurs. Par conséquent, je veux avoir les éléments suivants:
string s1 = 1
string s2 = 10
string s3 = 101
Je lis que ce n'est pas possible en utilisant std::to_string
car il renvoie toujours toutes les décimales, par exemple s3
serait quelque chose comme 101000
.
Je puis essayé ce qui suit:
double n3 = 1.101;
std::ostringstream strs;
strs << n3;
std::string str = strs.str();
boost::char_separator<char> sep(".");
boost::tokenizer<boost::char_separator<char>> tokens(str,sep);
for (const auto& t : tokens) {
EV << "separated parts " << t << endl;
}
Cela fonctionne très bien dans n1
et n3
cas, mais quand je l'utilise n2
retourne 1
au lieu de 10
.
Je réfléchis à la façon de résoudre ce problème et la seule chose à faire est de compter la précision avant de la convertir en chaîne, puis de redéfinir la précision.
Est-ce une stratégie viable? Comment puis-je compter le nombre de chiffres après le point?
'1.1 == 1.10', il n'y a aucune différence. – Jarod42
Simple mathématique élémentaire, peu importe le nombre de zéros à la fin de la partie décimale. Donc, 1.1 == 1.10, aussi 1.10 == 1.100000000000000000 ... –
Pourquoi ne pas utiliser ['std :: modf()'] (http://fr.cppreference.com/w/cpp/numeric/math/modf) ? – piwi