Gå til innhold

Parse string til double


Anbefalte innlegg

Jeg holder på med et program som skal regne likninger, men jeg har støtt på et kipt problem. :cry:

 

Jeg ender opp med en string som kan se sånn ut: "14+6,3-7", jeg prøver å få denne til å regnes sammen, for å så samles i en double...

 

Noen som vet en måte jeg kan gjøre dette på?

 

C# og VB.NET er likebra :)

 

Kjempefint hvis noen kan si meg hvordan...

 

PS: Jeg kan ikke omgå dette problemer da stringen inneholder x'er som blir filtrert ut før den skal parses...

Lenke til kommentar
Videoannonse
Annonse

Holder på med å lage mye det samme akkurat nå, min er ganske komplisert dog, slik fungerer den:

Den løser opp alle paranteser til et tree,

Alle operasjoner blir lagt inn i en liste i hver parantes, hver operasjon blir tildelt en funksjon (multiplikasjon, divisjon etc. bruker delegate til dette)

og hver operasjon blir laget i rekkefølger (gange, dele, pluss, minus etc)

 

og når dette er ferdig, har jeg en liste med operasjoner, hvor hver operasjon har 3 bools som sier om resultatet skal bli lagt til stack, eller om noen av variablene skal bli hentet fra stack.

 

Dremed blir hver expression kompilert til en rekke instruskjoner, og dermed kan komplisert funksjoner bli jhørt lynkjapt :) den er ikke helt ferdig enda though, så jeg gir med en jeg skrev i VB.NET for et par år siden.

 

Det er ikke sikert den fungerer helt, men du kan jo se på den.

 

EDIT: Huff, fikk ikke lov å legge den til uten å zippe den først.

 

Edit2:

 

Det er ganske mye arbeid, så det enkleste er å lage en C# compiler for å gjøre jobben

VBForums

Math.zip

Endret av GeirGrusom
Lenke til kommentar

Mange takk GeirGrusom!

 

Men tror kansje ikke den virka helt?

 

Regner med det er "GetDecimalValue" som ville være den mest aktuale for meg. Men "GetDecimalValue("5+3/2")" Returnerer 5 :)

 

Stor sjangs for at jeg har gjort noe galt :)

 

EDIT:

 

Kikka på linken du ga meg. Det så veldig innteresant ut!

 

Var jommenmeg en vb port også :Dhttp://www.vbforums.com/showthread.php?t=397265

 

 

EDIT2: Den virka jo kjempebra! Littt treig, men det gjør ikke noe for min del :D

Endret av ze5400
Lenke til kommentar

Et par ting du skal huske på er for det første rekkefølgen ting regnes ut... hva som gjøres først av * og +.. hva som gjøres først av - og / osv...

 

(5*2+2) er ikke det samme som (5*(2+2)) osv... :)

 

Sånn rent bortsett fra det ville jeg nok parset en ligning til et binært tre. Absolutt ryddigste og enkleste måten å gjøre det på..

Endret av Manfred
Lenke til kommentar

Skole? Nei, ikke helt... ;)

 

Men det er hendig å kunne regne med imaginære tall hvis man f.eks. skal finne absorpsjonskoeffisienter til et sammensatt materiale, men er så heldig at man tilfeldigvis kjenner den akustiske impedansen (som er imaginær) til de forskjellige lagene . :)

 

Selvfølgelig kan man bruke Matlab eller lignende, men det går så forferdelig sent... :ermm:

Lenke til kommentar

Men så er jeg veldig for grafiske brukegrensesnitt og det er så mye enklere i VB/C# at derfor har jeg lyst til å regne med imaginære tall i .NET. :)

 

Har en liten add-in som noen har skrevet fra ett eller annet sted, men den er veldig tungvindt å bruke. Eksempelvis må "(5+4i) + (4+3i)" skrives slik (eller iallfall noe som ligner):

ComplexMath.Add(New ComplexMath.Number(5, 4), New ComplexMath.Number(4, 3))

og det er vanskelig å holde tunga bent i munnen når uttrykkene blir verre enn det (noe som ikke skal så mye til)... ;)

Endret av moskus
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...