Solved

Convert string to Double, accepting both comma and dot

Posted on 2009-07-04
12
2,060 Views
Last Modified: 2013-11-26
I want to be able, in VB .Net, to convert a string into a double, considering either comma or dot as decimal separator.

How can I do?
0
Comment
Question by:Emanuele_Ciriachi
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
  • 2
  • +2
12 Comments
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 500 total points
ID: 24777880
you should replace either one by the other (in the string), and use a CultureInfo object to specify which one you are finally using.
0
 
LVL 1

Author Comment

by:Emanuele_Ciriachi
ID: 24777885
This doesn't answer my question.
I would like to be able to parse a string into a double regadlesss of the CultureInfo I am currently using.
This could potentially take the form of checking the current decimal separator, and replacing the other into it whenever I'm trying to parse a double into a string.
0
 

Expert Comment

by:james4651
ID: 24777892
You could just replace the commas with dot and call Convert.ToDouble(string)
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 12

Expert Comment

by:Ammar Gaffar
ID: 24777919
Hi,
If your string variable is StrVal then try this:

Dim d as Double = Format(CType(StrVal,Double),"0,00")

Open in new window

0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24777920
>I would like to be able to parse a string into a double regadlesss of the CultureInfo I am currently using.
I guess I did not make clear that you could specify a dedicated cultureinfo just for the Double.Parse() call:
http://www.java2s.com/Tutorial/CSharp/0440__I18N-Internationalization/ParsingnumbersbasedonCultureinfo.htm

you might also try the invariant culture:
http://www.java2s.com/Tutorial/CSharp/0440__I18N-Internationalization/Parsingnumberswithcultureinvariantparsing.htm
0
 
LVL 1

Author Comment

by:Emanuele_Ciriachi
ID: 24777931
Africans,

I don't know if my sting is a StrVal. Could you please shed some light on the issue?


angelIII,
the problem is that I don't know in which culture environment the program will run. In this context, being able to apply freely one convesion system or the other doesn't help.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24777989
>the problem is that I don't know in which culture environment the program will run.
I repeat: you can FORCE the culture info to be used for the parsing, completely ignoring the user environment.
0
 
LVL 1

Author Comment

by:Emanuele_Ciriachi
ID: 24778001
All right, but then again the string could still contain either commas or dots, and forcing an environment that accepts either one or the other will not cover all possible cases...

Oh wait, I think I've got it: I can force the usage of commas, and then preemptively change all dots in commas, right?

If so, which command can I use to force the CultureInfo of each?
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24778019
>Oh wait, I think I've got it: I can force the usage of commas, and then preemptively change all dots in commas, right?

was my first comment :)

>If so, which command can I use to force the CultureInfo of each?
see the comment with the 2 links.


0
 
LVL 39

Expert Comment

by:abel
ID: 24778021
Just for the fun of it (i know, there are already many comments), but why not simply doing something like this?

 


' with a dot, no (real) effect '
Dim dbl As Double = Double.Parse("12.34".Replace(",", "."), CultureInfo.InvariantCulture)
 
' same method with a comma, there is effect '
Dim dbl As Double = Double.Parse("12,34".Replace(",", "."), CultureInfo.InvariantCulture)
 
' in both cases, result is 12.34 in the variable named dbl '
 
' More generic, place this in your class '
Function ParseDouble(value As String) As Double
   Return Double.Parse(value.Replace(",", "."), CultureInfo.InvariantCulture)
End Function
 
' call it like so '
Dim myDbl As Double = ParseDouble("1234,567")

Open in new window

0
 
LVL 39

Expert Comment

by:abel
ID: 24778023
But: that's just a simplified way of parsing a double and when it contains a thousands-separator, you'd be in trouble.

Working with the Cultures, the way AngelIII explained, is the long-term best way of dealing with this.
0
 
LVL 1

Author Closing Comment

by:Emanuele_Ciriachi
ID: 31599818
Thanks, this worked.
For everyone that might stumble on this question, Angel is suggesting to force a specific CultureInfo and then perform the replacement of comma in dot (or viceversa) according to it.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to repeat the data 4 30
VB.NET - Refactor Class per SOLID principles 2 33
how to remove error in database 6 38
Telerik RadEditor Control Save 8 20
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
Finding and deleting duplicate (picture) files can be a time consuming task. My wife and I, our three kids and their families all share one dilemma: Managing our pictures. Between desktops, laptops, phones, tablets, and cameras; over the last decade…

696 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question