Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Konverzija iz stringa u double

[es] :: C/C++ programiranje :: Konverzija iz stringa u double

[ Pregleda: 2172 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

erno
Ernad Besirevic
Graz

Član broj: 56944
Poruke: 261
*.tu-graz.ac.at.



Profil

icon Konverzija iz stringa u double22.05.2006. u 12:12 - pre 217 meseci
treba mi mala pomoc oko konverzije i to iz string u double. ispod je moj kod i opisan problem koji imam:

Code:


#include<iostream>
#include<sstream>
#include<string>

using namespace std;

int main()
{
    double number;
    string str_num;
    stringstream sstrm;

    cin >> str_num;
    sstrm << str_num;
    sstrm >> number;

    cout << number << endl;

    return EXIT_SUCCESS;
}



problem: kako mogu provjeriti da li je neki zadani string izvan granica double vrijednosti tako da ne dobijam neku lijevu konverzaciju kao npr. ako unesem 1.7e311, da mi ispise gresku da je taj broj prevelik za double opseg ili ako npr. saberem dva broja: 1.7e600 + 1.8e308. kao rezultat ja dobijem 1.INF, a to ne zelim nego gresku da mi ispise ako izlazi broj iz opsega. hvala za svaku pomoc.

pozdrav,
ernad
 
Odgovor na temu

idb
Ivan Bulic
Beograd

Član broj: 4436
Poruke: 402



Profil

icon Re: Konverzija iz stringa u double22.05.2006. u 12:41 - pre 217 meseci
Mozda ti ovo bude dovoljno (pogledaj dokumentaciju za detalje):
Code:
#include <stdlib.h>
 double strtod( const char *start, char **end );
idb
 
Odgovor na temu

erno
Ernad Besirevic
Graz

Član broj: 56944
Poruke: 261
129.27.2.*



Profil

icon Re: Konverzija iz stringa u double22.05.2006. u 14:12 - pre 217 meseci
pokusao sam i ovo ali nisam siguran da radi bas kako treba:

Code:


#include<iostream>
#include<cstdlib>

using namespace std;

int main()
{
    char *end;
    cout << strtod("2.2e-310",&end) << endl;
    cout << errno << endl;

    return 0;
}



opseg jedne double varijable je od 2.2e–308 do 1.8e308 pa bi u mom slucaju trebao vratiti gresku ili ja mozda grijesim? (za pozitivne brojeve mi vrati gresku ako prekoracim 1.8e308 ukljucujuci i sam taj broj).

hvala i pozdrav
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
..26.static.techtelnet.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: Konverzija iz stringa u double22.05.2006. u 16:21 - pre 217 meseci
Citat:
erno: pokusao sam i ovo ali nisam siguran da radi bas kako treba:
opseg jedne double varijable je od 2.2e–308 do 1.8e308 pa bi u mom slucaju trebao vratiti gresku ili ja mozda grijesim? (za pozitivne brojeve mi vrati gresku ako prekoracim 1.8e308 ukljucujuci i sam taj broj).
hvala i pozdrav


Procitaj help za strtod koji kaze i ovo.

"If the string s does not match a valid pattern, the value stored in *endptr is s, and x is zero. If a range error occurs, strtod behaves exactly as the functions declared in <math.h>."

"A range error occurs when the return value of the function is defined but cannot be represented. A function can report a range error by storing the value of ERANGE in errno and returning one of several values:

HUGE_VAL -- if the value of a function returning double is positive and too large in magnitude to represent
-HUGE_VAL -- if the value of a function returning double is negative and too large in magnitude to represent
zero -- if the value of the function is too small to represent with a finite value "

Dakle nesto kao ovo:

Code:

    char *retVal=NULL;
    double Result = strtod("2.8e-500",&retVal);
    bool bret = (errno  == ERANGE   ) && (
            (Result == HUGE_VAL ) ||
            (Result == -HUGE_VAL) ||
            (Result == 0.0      )    );




Tko leti vrijedi
 
Odgovor na temu

erno
Ernad Besirevic
Graz

Član broj: 56944
Poruke: 261
*.tu-graz.ac.at.



Profil

icon Re: Konverzija iz stringa u double23.05.2006. u 11:14 - pre 217 meseci
hvala na pomoci ;-)
 
Odgovor na temu

[es] :: C/C++ programiranje :: Konverzija iz stringa u double

[ Pregleda: 2172 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.