Click here to Skip to main content
Click here to Skip to main content
 

Parsing floating point strings with specified decimal separator

By , 9 Apr 2003
 

Introduction

Everyone knows that "everything is easy in .NET" and in most cases it really is. This also applies to string parsing issues. When you want to convert string "123.4" into value 123.4, you usually write code looking like:

double someNumber;
string myNumber = "123.4";

try
{
    someNumber = double.Parse(myNumber);
}
catch(Exception)
{
    //something's wrong
    //that is not a number
}

In most cases it works with no trouble. Until your string is not a number or... decimal separator is different than one defined in your system.

Let's assume that your system decimal separator is a comma (",") and you want to parse string with dot (".") separator - there's no way. An exception is thrown (and you are happy that try-catch works :) ).

There is of course an easy way to parse strings with decimal separator you want to use. The Parse method allows to define additional parameter - IFormatProvider. If you put NumberFormatInfo object as a second parameter of Parse method, you can specify what decimal separator should be used.

According to MSDN you can obtain current thread NumberFormatInfo by CurrentInfo static property. There is some confusion because CurrentInfo is a read-only property and you would like to modify the decimal separator.

There's a little "walk around" - use current CultureInfo, "clone" its NumberFormatInfo and modify the decimal separator:

class ParserClass
{
    ...
    static System.Globalization.NumberFormatInfo ni = null;
    public ParserClass()
    {
       System.Globalization.CultureInfo ci = 
          System.Globalization.CultureInfo.InstalledUICulture;
       ni = (System.Globalization.NumberFormatInfo)
          ci.NumberFormat.Clone();
       ni.NumberDecimalSeparator = ".";
    }
    public someMethod()
    {
        double someNumber;
        string myNumber = "123.4";
        try
        {
            someNumber = double.Parse(myNumber,ni);
        }
        catch(Exception)
        {
        }
    }
}

Using static variable ni allows you to use it whenever you parse string with "." decimal separator (assuming that instance of ParserClass is created).

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Marcin Cuprjak
Architect
Poland Poland
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralOr you do not care...memberrroestenburg5 Oct '07 - 2:00 
GeneralRe: Or you do not care...memberToumar5 Aug '09 - 11:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130523.1 | Last Updated 10 Apr 2003
Article Copyright 2003 by Marcin Cuprjak
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid