» »

C++ string "2/3" to double - kako?

C++ string "2/3" to double - kako?

twom ::

atof ("0.6666666) vrne 0.66...,
če pa imam "2/3" mi pa vrne 2.0...

S katero funkcijo bi lahko pretvoril string "2/3" v double?

Lep pozdrav,
Peter
  • spremenil: twom ()

BlueRunner ::

atof pretvari niz v številko, ni pa to kalkulator, ki bi znal računati ali pa bi razumel ulomke.

2.0 dobiš zato, ker se mu "ustavi" pri znaku '/', ki ni del zapisa številke.

Senitel ::

In iz katerega naslova je to čudno? Atof pretvori string v število. Ne rešuje pa matematičnih izrazov!

twom ::

Se opravičujem za slabo zastavljno vprašanje.
Ugotavljam, da drugi zaenkrat še ne znajo brati mojih misli, in tudi meni zaenkrat to še ne uspeva :)

Moje vprašanje je kako to narediti.

P.S moj prvi post sem poravil, da bo bolj jasno kaj želim.

Lp,
Peter

Zgodovina sprememb…

  • spremenil: twom ()

ERGY ::

Preberi števili med / in ju deli, seveda preveri tudi, da je imenovalec različen od 0.

Keki ::

Mogoče lahko uporabiš stringstream (sstream).

double j = (double)2/3;
stringstream ss;
ss << j;
string a = ss.str();
cout<<a.c_str()<<endl;
http://www.alfakan.si/
http://mihajerot.si/

Senitel ::

To sploh nima povezave s tem kar hoče peter_nn naredit, oziroma je ravno obratno. Ti začneš z double in končaš s stringom, on začne z stringom matematičnega izraza in hoče končat z double/float.

twom ::

Double bi mi čisto zadoščal.

Iz konfiguracijske datoteke berem enostavne nastavitve (5/6, 3/4, 2/3, 1/2), ki jih uporabljam kot string ("2/3") in kot double (0.6666..).
Sedaj preprosto vzporedno vodim dve spremenljivke (neki[i].dbl in neki[i].dblStr).

Lp,
Peter

dba ::

a bi bilo težko, da string najprej prečekiraš če vsebuje "/", potem pa ga parsaš na del pred "/" in del po "/" pa potem pretvoriš v double, pa deliš?

zhigatsey ::

Naredi si svoj "kalkulator", če ni že preveč za ta primer.. tako boš spustil lahko skozi še kaj
drugega kot samo "x/x"... Na code projectu je en kup primerov na to temo... išči pod
"expression evaluator", "reverse polish notation" itd...

Tule je en takšen primerček...

Lp...

fiction ::

Vse je odvisno od tega kako splosen hoces biti (oz. koliko hoces zakomplicirati). Lahko podpres "x / y", "x operacija y" ali pa kar napises parser ter evaluator za izracun vrednosti poljubnega aritmeticnega izraza. To sicer ni tako zelo komplicirano, ampak vseeno je precejsen overkill za to kar hoces narediti.
Mogoce bi bilo smiselno razmisliti ze o tem, da bi samo spremenil zapis v konfiguracijski datoteki.

RPN je drugace zapis v postfiksni obliki (tako npr. pises "x y /" namesto "x / y"). Fora tukaj je, da ne rabis oklepajev za opis prioritete dolocenih operacij (vse je jasno v izrazu, ceprav ni nobenega oklepaja oz. zaklepaja). RPN kalkulator lahko naredis s pomocjo sklada. Operande vedno nalagas na sklad, ko prides do operacije pa nad vrhnjima dvema podatkoma naredis neko operacijo in das rezultat nazaj na sklad. Na koncu imas na vrhu samo en element - rezultat izraza. No, ampak za izraz v infiksni obliki (ala 1 + 2) ti to ne pomaga kaj dosti.

zhigatsey ::

No saj zato ga pa najprej pretvoriš v postfiksno obliko, to je tudi
vključeno v podani primerček zgoraj...
Drugače pa išči pod "shunting yard algorithm"...

Keki ::

al pa da preprosto ovrednotiš x pa y z atoi pol pa ju zdeliš pa maš
http://www.alfakan.si/
http://mihajerot.si/

napsy ::

#include <stdio.h>

int main()
{
    char *racun= "2/3";
    float a, b;

    sscanf(racun, "%f/%f", &a, &b);
    printf("a: %f, b: %f\n", a, b);

    return 0;
}

"If you die, you die. But when you live you live. There is no time to waste."

twom ::

#include <stdio.h>

int main()
{
    char *racun= "2/3";
    float a, b;

    sscanf(racun, "%f/%f", &a, &b);
    printf("a: %f, b: %f\n", a, b);

    return 0;
}


Uporabno :) in zelo enostavno :)

Lep pozdrav


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C (Izračun povprečja)

Oddelek: Programiranje
141609 (1243) joze67
»

C++ double _1.0000imavrednost0.99999

Oddelek: Programiranje
131569 (1322) Spura
»

[Pomoč]Visual c++ CString to double

Oddelek: Programiranje
5911 (874) PaX_MaN
»

Python - problem

Oddelek: Programiranje
132779 (2509) slevin
»

[c++] cin >> problem

Oddelek: Programiranje
241436 (1106) Tutankhamun

Več podobnih tem