Comment convertir un String en Double ?

Bonjour,

Je récupère actuellement des informations sur un fichier config.txt présent sur la carte SD de mon shield Ethernet.

Voila le fichier :

[NOM]A01;
[TEMPS]162;
[IP]10.138.0.1;
[Identifiant]TOTO;
[PWD]TOTOTTE;

J’ai réussi à récupérer les informations grâce à deux personnes qui m’ont aidés sur le forum (Scroum et lesept).

Seulement, lorsque je récupère la variable temps, elle est de type String et j’ai besoin de faire des calculs avec.
Ma question est donc : Existe-il un moyen pour mettre cette variable en type double (Elle peut devenir très grande d’où l’utilisation du double) ?
Si non, comment faire ?

Merci.

Voila mon code :

#include <TextFinder.h>
#include <SPI.h>
#include <SD.h>

typedef struct
{
  String nom;
  String tempstotal;
  String ip;
  String id;
  String pwd;
}machine;

double compteur = 0;

machine m1;

File conf;
File heures;

void setup() {
  Serial.begin(9600);
  pinMode(10, OUTPUT);
  digitalWrite(10,HIGH);
  int temp;
  char buff[50];
  if (!SD.begin(4)) { // Gère les erreurs
    //Serial.println("Erreur de carte SD !");
    for(;;);
    }
    
    conf=SD.open("config.txt", FILE_READ);
    TextFinder finder(conf);
    conf.seek(0);
    temp=finder.getString("[NOM]",";",buff,50);
    m1.nom=buff;
    Serial.println(m1.nom);
    temp=finder.getString("[TEMPS]",";",buff,50);
    m1.tempstotal=buff;
    Serial.println(m1.tempstotal);
    temp=finder.getString("[IP]",";",buff,50);
    m1.ip=buff;
    Serial.println(m1.ip);
    temp=finder.getString("[Identifiant]",";",buff,50);
    m1.id=buff;
    Serial.println(m1.id);
    temp=finder.getString("[PWD]",";",buff,50);
    m1.pwd=buff;
    Serial.println(m1.pwd);
}

void loop() 
{
  Serial.println(m1.nom);
  Serial.println(m1.tempstotal);
  Serial.println(m1.ip);
  Serial.println(m1.id);
  Serial.println(m1.pwd);
  delay(1000);
}

Ça s'appelle une conversion ou 'cast' in English.

Dans ton cas tu peux tester:

nouvelle_variable = (uint64_t) monString;

Salut
Un double me parait inutile car c'est un flottant.
Je pense que tu as plutôt besoin d'un long ?

Conversion en float : toFloat() - Arduino Reference
Conversion en long : toInt() - Arduino Reference

@+

Aucune des deux solutions fonctionne dans mon cas.
Pour le double, il m'est utile car je convertit des milliers de secondes en heure avec deux chiffres après la virgule. Mon compteur d'heures peux grimper jusqu'à des centaines de milliers donc je reste sur un double. :slight_smile:

un simple float peut aller jusqu'à 10 puissance 38 environ, avec 5 à 6 chiffres significatifs.
L'interêt du double n'est pas tellement de stocker des nombres très grands, mais de les stocker avec une meilleure précision que le float.

+1, pour l'usage d'entiers longs pour les grandes valeurs plutôt que le type float ou double.

Pour t'en convaincre voila ce que j'obtiens sur ma nano avec le test suivant :

String s="123456789";
double d=s.toDouble();
Serial.print("d :"); Serial.println(d);

Affiche :

d :123456792.00

Pas top les doubles dans ce cas pour les raisons évoquées plus haut !

Pour revenir à la question initiale, qui demandait comment convertir un String en valeur numérique, il suffit de lire la doc et on trouve que la classe String possède des méthodes pour cela toInt(), toFloat(). Comme ça, Herouis pourra choisir le type qu'il veut.