Convert string to Double, accepting both comma and dot

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?
LVL 1
Emanuele_CiriachiAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Guy Hengel [angelIII / a3]Billing EngineerCommented:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Emanuele_CiriachiAuthor Commented:
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
james4651Commented:
You could just replace the commas with dot and call Convert.ToDouble(string)
0
PMI ACP® Project Management

Prepare for the PMI Agile Certified Practitioner (PMI-ACP)® exam, which formally recognizes your knowledge of agile principles and your skill with agile techniques.

Ammar GaffarSoftware EngineerCommented:
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
Guy Hengel [angelIII / a3]Billing EngineerCommented:
>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
Emanuele_CiriachiAuthor Commented:
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
Guy Hengel [angelIII / a3]Billing EngineerCommented:
>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
Emanuele_CiriachiAuthor Commented:
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
Guy Hengel [angelIII / a3]Billing EngineerCommented:
>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
abelCommented:
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
abelCommented:
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
Emanuele_CiriachiAuthor Commented:
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.