Solved

Convert string to Double, accepting both comma and dot

Posted on 2009-07-04
12
2,004 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
  • 4
  • 4
  • 2
  • +2
12 Comments
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 500 total points
Comment Utility
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
Comment Utility
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
Comment Utility
You could just replace the commas with dot and call Convert.ToDouble(string)
0
 
LVL 12

Expert Comment

by:Ammar Gaffar
Comment Utility
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 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
>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
Comment Utility
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
>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
Comment Utility
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 142

Expert Comment

by:Guy Hengel [angelIII / a3]
Comment Utility
>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
Comment Utility
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
Comment Utility
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
Comment Utility
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

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

This article describes relatively difficult and non-obvious issues that are likely to arise when creating COM class in Visual Studio and deploying it by professional MSI-authoring tools. It is assumed that the reader is already familiar with the cla…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

763 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

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now