Conversion de string vers (long) double

Résolu
removebeforeflight Messages postés 2 Date d'inscription samedi 13 février 2010 Statut Membre Dernière intervention 15 février 2010 - 14 févr. 2010 à 15:03
removebeforeflight Messages postés 2 Date d'inscription samedi 13 février 2010 Statut Membre Dernière intervention 15 février 2010 - 15 févr. 2010 à 09:41
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 ;-) .
A voir également:

2 réponses

cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
14 févr. 2010 à 23:08
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.
3
removebeforeflight Messages postés 2 Date d'inscription samedi 13 février 2010 Statut Membre Dernière intervention 15 février 2010
15 févr. 2010 à 09:41
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 !
0
Rejoignez-nous