ciao a tutti,
ho il problema di dover convertire un numero che estraggo da una stringa tramite il comando "substring", assegnandolo a una variabile di tipo double con 6 cifre decimali (trattasi di latitudine/longitudine).
Tramite il comando toDouble(), come noto, mi approssima alla seconda...
Innanzitutto evita l'uso della classe String che su MCU di classe Arduino porta a problemi con la memoria ecc. ecc. ormai è un tema ricorrente sul forum cerca e trovi centinaia di topic che sconsigliano l'uso ed il perché, estrai quindi i valori e usa come destinazione un array di char (stringhe classiche del C) e usa la funzione atof
lcursi:
attraverso la string ci devo passare perché ho il valore scritto su una SD in formato testo.
Non mi è chiara una cosa: se io converto VAL = VALORE.toDouble();
in VAL mi ritrovo due sole cifre decimali? dalla documentazione
(toDouble() - Arduino Reference) direi di si, ma se la stampo sulla seriale
Serial.println(VAL, 6);
vedo sei cifre decimali!
il metodo toDouble della classe string arrotonda a due decimali, quando lo vai a stampare ne vedi 6 ma sono cifre casuali che non corrispondono al reale valore convertito.
Come detto anche da Guglielmo leggi la SD con stringhe classiche del C e poi applica la funzione che ti ho suggerito
scusate ma non mi torna.
Il valore di partenza è 10.345678, memorizzato dentro una stringa più lunga nella scheda SD.
Lo estraggo con substring e lo archivio dentro LAT1 (String).
converto LAT1 in double
LAT1_DOUBLE = LAT1.toDouble();
a questo punto dovrebbe essere arrotondato a 10.35
se però lo stampo con Serial.println(LAT1_DOUBLE, 6);
mi ritorna ESATTAMENTE 10.345678, non credo sia un caso..,.
STANDARDOIL: un GPS per softair. Io devo passare le coordinate di un nuovo waypoint tramite schede SD che si trovano lungo il percorso (o che vengono rivelate in determinate posizioni).
Alla luce di quanto riportato da nid la libreria è stata aggiornata quindi è corretto che tu veda tale valore, così com'è non viene più arrotondato. Resta il consiglio di NON usare la classe String