Conversion de string vers (long) double [Résolu]

Signaler
Messages postés
2
Date d'inscription
samedi 13 février 2010
Statut
Membre
Dernière intervention
15 février 2010
-
Messages postés
2
Date d'inscription
samedi 13 février 2010
Statut
Membre
Dernière intervention
15 février 2010
-
Bonjour à tous,

Pour les besoins, d'une application, je doit convertir des string (des coordonnées latitude/longitude) vers des valeurs numériques, avec une précision d'au moins 10 chiffres significatifs. Mais tous mes essais n'ont rien donnés, que ça soit via la fonction atol ou via une fonction que j'ai codé moi même, je suis toujours bridé a une précision de 6 chiffres significatifs (donc en gros, ça va de 179.999 à 0.00999999). Je cherche donc comment faire pour obtenir suffisament de précision.?

Ci dessous, le code de conversion que j'ai tenté de faire, mais qui ne me donne pas satisfaction (bridé a 6 chiffres significatifs, comme avec atol) :
long double stringToDouble(string str){
int taille;
double virgule;
long double sortie=0;
virgule=pow(10,str.find(".")-1);
str.erase(str.find("."),1);
cout << virgule << endl;
taille = str.size();
cout << taille << endl;
for(int k=0;k<taille;k++){
sortie=sortie + atoi(str.substr(k,1).c_str())*virgule;
virgule=virgule/10;
cout << "k " << k << " virugle " << virgule << " sortie : " << sortie << " valeur : " << atoi(str.substr(k,1).c_str()) <<endl;
cout << "intermédiaire : " << atoi(str.substr(k,1).c_str())*virgule << endl;
}
return sortie;
}


Merci pour votre aide, je commencer à m'arracher les cheveux la ;-) .

2 réponses

Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Bonjour,

J'éspère que le code suivant va t'éclairer sur la façon de manipuler les chaînes et les nombres en c++.

/*____________________________________________________________________
*/
#include 
#include  //pour std::setprecision
#include <sstream> //pour std::istringstream
#include <string>
#include <cmath>
/*____________________________________________________________________
*/
double stringToDouble( std::string str )
{
std::istringstream iss( str ) ;
double d ;
iss >> d ;
return d ;
}
/*____________________________________________________________________
*/
int main()
{
double pi = stringToDouble( "3.1415926535897932384626433832795" ) ;
std::cout << std::setprecision( 15 ) << pi << std::endl ;
//sortie : 3.14159265358979

}
/*____________________________________________________________________
*/


@++

Lucky92.
Messages postés
2
Date d'inscription
samedi 13 février 2010
Statut
Membre
Dernière intervention
15 février 2010

Merci beaucoup pour ta réponse.

Je crois que je peux en conclure que mon algo était bon... c'est juste à priori mon appel d'affichage qui n'était pas bon (donc sans utiliser setprecision(15), l'affichage de la valeur est automatiquement tronqué à 6 chiffres significatifs ?).

Merci encore !