String naar float of double (0.0000)

  • Onderwerp starter Onderwerp starter DMK
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

DMK

Gebruiker
Lid geworden
5 nov 2013
Berichten
31
Hallo,

Ik krijg via een seriële poort een string binnen (0.0000 tot 200.0000).

Deze string wil ik omzetten naar een double of float ofzo. Het probleem is dat als ik dit omzet via de parse functie, hij 0.0002 omzet naar 2.0 (via double.parse en via float.parse).

Nu kan ik dit getal delen door 10000, maar dan kom ik (geen idee hoe), maar in de problemen als er meerdere cijfers vóór de comma staan.
Is er een veilige manier om de string met 4 cijfers achter de comma om te zetten naar een waarde waar ik mee kan rekenen?


Bedankt
 
Wat als je gewoon:

Convert.Double()

gebruikt? Parse is een "gevaarlijke" functie, omdat die afhankelijk is van de instellingen van de computer.
 
Bedankt,

Dit is de waarde (in string formaat) die ik binnenkrijg: -0.0001
Dit is wat Convert.ToDouble er van maakt: -1.0

Hetzelfde dus als de Parse. Waar kan dit aan liggen?

Bedankt

Edit: heb het probleem gevonden.
Als ik in de string 0.0001 verander in 0,0001 (punt naar comma), en deze omzet met Convert.ToDouble dan werkt het wel.
Raar maar het werkt ;)
 
Laatst bewerkt:
Mijn fout, niet goed gelezen, string is ook bij convert culture relatief.

Je moet de invariantculture variant van convert gebruiken. Het heeft te maken met je instellingen. Je hebt een Nederlandse instelling, dus je programma gaat ervan uit dat je een "," meegeeft. Je krijgt echter een "." Als je zeker weet dat je altijd een "." krijgt (waarschijnlijk in dit geval) is het beter om te converteren met invariant of de Amerikaanse "culture"

Code:
double x;
double.TryParse(textBox1.Text,System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo, out x);

Deze code gebruikt de "invariant" methode
 
Mijn fout, niet goed gelezen, string is ook bij convert culture relatief.

Je moet de invariantculture variant van convert gebruiken. Het heeft te maken met je instellingen. Je hebt een Nederlandse instelling, dus je programma gaat ervan uit dat je een "," meegeeft. Je krijgt echter een "." Als je zeker weet dat je altijd een "." krijgt (waarschijnlijk in dit geval) is het beter om te converteren met invariant of de Amerikaanse "culture"

Code:
double x;
double.TryParse(textBox1.Text,System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo, out x);

Deze code gebruikt de "invariant" methode

Om toch nog even terug te komen op je code, ik gebruikte mijn code nog (Convert.Todouble maar dan met omgezet naar comma). Nu voer ik mijn code op een andere pc uit en inderdaad maakt hij van 0.0003 weer 3.0.

Ik heb je code gebruikt maar nu blijft hij op 0 staan. (ook al is de waarde van de invoer bv 152,9341).
Ik heb het ook geprobeerd met bv 152.9341 (punt ipv comma), maar dit geeft ook 0 als resultaat. (0.0 als ik debug en een breakpoint zet op de out x)

Iemand een oplossing?
Bedankt!
 
Laatst bewerkt:
Als je invariant gebruikt op deze manier MOET je inderdaad de punt gebruiken als scheidingsteken. Het is gemaakt om juist de input hetzelfde te maken in welk land je ook werkt.

Gebruik je ook werkelijk variabele "x" en "out x" ? Ik heb het zojuist nog even getest en het werkt zoals verwacht in mijn programma. Mogelijk dat ook iemand anders kan valideren?

PS, een break op de regel zelf geeft altijd "out x = 0.0" omdat de "out" pas wordt uitgevoerd nadat de regel compleet is.
 
Bedankt, had blijkbaar een fout in de comma, deze deed achteraf nog een replace.
Het werkt inderdaad!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan