Pages: [1]   Go Down
Author Topic: convertire stringa in numero decimale..  (Read 1573 times)
0 Members and 1 Guest are viewing this topic.
Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

.. ho questo problema.. devo convertire una stringa tipo "650762387.45" nel corrisondente valore decoimale...
io faccio così:
faccio la scansione della stringa per individuare quanti caratteri a destra e quanti a sinistra de punto.
- trascuriamo, per adesso i decimali, e consideriamo solo la parte a sinistra:
- coatruisco la somma, con un ciclo for, così..

6 * 10 ^8 + 5 * 10 ^ 7 + 0 * 10 ^6 + 7 * 10 ^ 5 + 6 * 10 ^ 4 + 2 * 10 ^3 +  3 * 10 ^2 + 8 * 10 ^1 + 7 * 10 ^0
e dovrei ottenere il cosrrispondente valore in base dieci, a meno dei decimali 0,45 .....

ma niente. già dopo la 5 potenza .. l'elevazoine di 10 ^ i, comincia  a dare errori ...
l'elevazione a potenza la faccio con la funzione pow(base, esponente) ...

credo sia un errore di casting.. ma come faccio ad eliminarlo..

come tipo di dati uso float per il numero che devo ottenere ed int per l'esponente....

conoscete qualche sistema o quelche funzione già pronta e ben funzionante????

qualche suggerimento???

grazie


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

parlo da ignorante in arduino...si può usare atoi()?
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

includendo la stdlib.h hai le funzioni atol, atoi, strtol, ma non so se si possano usare per i numeri a virgola mobile.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non sò.. forse.
poi provo.
Ma e per i decimali... mi pare che trasformi solo in un intero....
comunque non saprei su arduino..
grazie
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9311
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

.. ho questo problema.. devo convertire una stringa tipo "650762387.45" nel corrisondente valore decoimale...

Se i valori sono quelli non puoi convertirli perché vanno oltre la capacità di rappresentazione di un float a 32 bit, perlomeno mantenendo la parte decimale e la prima tre cifre basse dell'intero, ovvero al massimo ottieni la rappresentazione in formato float come "650762000.00".
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9311
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per un tipo artificioso a 64 bit posso farti un atoi64
Non ora, ma e' in cantiere tra le TODOLIST 2012.

E che ci fai visto che Arduino non prevede la matematica a 64 bit ?
Se gli serve sotto forma di valore decimale, quindi un float, è perché deve farci dei calcoli altrimenti tanto vale lasciarlo sotto forma di stringa.
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21472
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tralasciamo quello che legacy ha in programma di fare nel corso di questo anno perché adesso come codice non esiste ancora.

Esiste anche la funzione atof() che converte una stringa in float. La stringa deve terminare con un "0".
Come dice Astrobeed la precisione dei float su arduino non é la migliore.

float

Datatype for floating-point numbers, a number that has a decimal point. Floating-point numbers are often used to approximate analog and continuous values because they have greater resolution than integers. Floating-point numbers can be as large as 3.4028235E+38 and as low as -3.4028235E+38. They are stored as 32 bits (4 bytes) of information.

Floats have only 6-7 decimal digits of precision. That means the total number of digits, not the number to the right of the decimal point. Unlike other platforms, where you can get more precision by using a double (e.g. up to 15 digits), on the Arduino, double is the same size as float.

Vuol dire che hai solo 6 a 7 cifre valide anche se il range di numeri che copre va da 10 alla 38 fino a -10 alla 38.

Ciao Uwe
Logged

Pages: [1]   Go Up
Jump to: