|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
[C++/C] come convertire da stringa a float
Ciao a tutti,
sto cercando un modo per convertire da una stringa del tipo: char str[50]; contenente il valore = "43.94394" in float. Cercando in cplusplus.com ho trovato solo la fonzione atof che converte una stringa in double, ma purtroppo non fa a caso mio. Grazie a tutti! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Come mai non fa al caso tuo?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
Perche' converte in un float avente solo 7 cifre. 26.55656565656556 -> 26.5565 Io cercavo una funzione che convertisse fino a 20 o + cifre.. pertanto avrei bisogno di lavorare con double o long double.. c'e' qualcosa che potrei usare? ho visto che esiste atod ma non so in che libreria e'.. grazie! |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 340
|
em se non erro.. non picchiare se sbaglio
dovresti fare una cosa del genere: float numero; numero = (float) str; cosi dovrebbe andare.. pero non ti assicuro niente |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Pescara
Messaggi: 304
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
Quote:
non riesce nemmeno a compilare. ciao! |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Io per queste cose uso le stringstream:
stringstream str; double numeroDouble; str << stringaNumero; str >> numeroDouble; Attenzione che non tutti i numeri sono rappresentabili in double...può benissimo essere che il numero convertito non sia identico a quello originale, ma magari scartare di qualche millesimo di punto percentuale... Ma questo è normale...visto che l'insieme dei numeri rappresentabili con i double non è continuo... |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
nb se ti serve long double, usa strtold (è standard C99, ma essendo una funzione e non un costrutto dovrebbe essere utilizzabile anche nei programmi c++ se le tue librerie c la contengono).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
"332.3232323232" >> numerodouble; e successivamente: stringa >> numerodouble; Mi in entrambi i casi da un errore di compilazione -> error: invalid operands of types `const |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perchè non hai fatto come ti ho detto io...
stringstream str; double numeroDouble; str << "332.3232323232"; str >> numeroDouble; |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
Hai ragione, ora funziona. Ma usando il seguente codice: int j=0; char tmpstring[50]; do{ c=fgetc(msmFile); tmpstring[j]=c; j++; }while(c!='\n' && c!=' '); stringstream str; str << tmpstring; cout << "Stringa: " << tmpstring << endl; str >> pepMass; cout << "Value: " << pepMass << endl; Il valore convertito perde di precisione infatti l'output risulta: Stringa: 35.231174769868 Value: 35.2312 Cosa sto sbagliando? Thanks! Ultima modifica di shang84 : 22-10-2005 alle 12:41. |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
Se ho una stringa contenente un float, e un double su cui salvare il valore convertito, che parametri devo specificare dato che strtold ne richiede 2 ed entrambi sono puntatori a char? Dalla man guide: long double strtold(const char*nptr,char **endptr); |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
using namespace std; #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <string.h> #include <sstream> int main () { stringstream str; double numeroDouble; str << "332.3232323232"; str >> numeroDouble; cout << numeroDouble << endl; char c[40]; c[0]='0'; c[1]='.'; c[2]='0'; c[3]='2'; c[4]='3'; c[5]='4'; c[6]='5'; c[7]='6'; c[8]='0'; c[9]='4'; c[10]='3'; c[11]='4'; c[12]='5'; c[13]='6'; c[14]='0'; c[15]='4'; c[16]='3'; c[17]='4'; c[18]='5'; c[19]='6'; c[20]='0'; c[21]='4'; cout << c << endl; stringstream ss; ss << c; ss >> numeroDouble; cout << numeroDouble << endl; return 0; } L'output che mi risulta è: 332.323 0.02345604345604345604ÿ¿x@èÃ@üo@,ä@Ð 0.023456 Che purtroppo viene troncato alla 7^ cifra, come se fosse un float. Non ci capisco + nulla! |
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Codice:
#include <iostream>
#include <sstream>
#include <string>
#include <iomanip>
using namespace std;
int main(void)
{
string str;
cin >> str;
istringstream is(str);
double d;
is >> d;
cout << "String: " << str << "\n";
cout << "Double: " << setprecision(14) << d << endl;
}
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
Dove hai trovato queste info? Ultima modifica di shang84 : 22-10-2005 alle 15:09. |
|
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Come sarebbe dove le hai trovate? Io queste cose le so.
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
|
|
|
|
|
|
|
#18 | ||
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
atof converte in _double_, non in float. Non so cosa si è fumato chi ha generato il nome, la "f" finale sta forse per "fumato" non per "float"
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
||
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Apr 2005
Città: <-|-|-*|*-|-|->
Messaggi: 347
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:53.



















