Go Down

Topic: convertire stringa in numero decimale.. (Read 1 time) previous topic - next topic

Paolo S

.. 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



diablo512

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

PaoloP

includendo la stdlib.h hai le funzioni atol, atoi, strtol, ma non so se si possano usare per i numeri a virgola mobile.
Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Paolo S

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

astrobeed


.. 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".

astrobeed


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.

uwefed

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.

Quote from: http://arduino.cc/en/Reference/Float
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

Go Up