views:

85

answers:

4

Hello,

I have amethod which returns numbers like this:

public decimal GetNumber()
{
    return 250.00m;
}

Now when this value is printed to the console for example, it has a comma (250,00) instead of a point (250.00). I always want a point here, what am I doing wrong?

Thanks

A: 

Locale-specific formatting?

http://en.wikipedia.org/wiki/File:DecimalSeparator.svg (Green equals a comma, so if you are calling ToString() on your decimal using the culture info of any of these locations, you will see a comma).

Tim
+8  A: 

decimal itself doesn't have formatting - it has neither a comma nor a dot.

It's when you convert it to a string that you'll get that. You can make sure you get a dot by specifying the invariant culture:

using System;
using System.Globalization;
using System.Threading;

class Test
{
    static void Main()
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");
        decimal d = 5.50m;
        string withComma = d.ToString();
        string withDot = d.ToString(CultureInfo.InvariantCulture);
        Console.WriteLine(withComma);
        Console.WriteLine(withDot);
    }
}
Jon Skeet
+1  A: 

As explained by Jon Skeet, you should specify the culture used to format the string:

var str = GetNumber().ToString(System.Globalization.CultureInfo.InvariantCulture);

It's a good practice to always use the ToString overload in which you specify the culture. Otherwise, .NET use the current thread Culture, which would write different strings to the output according to the locale of the PC...

Maupertuis
...on the other hand it could just as well be that using the current locale on the PC (given that we are not talking web application) is the preferred behavior. That would after all be what the user is used to seeing.
Fredrik Mörk
Yes, I agree with you. It's a valid behavior when the string will be used in the UI. But it can be a real issue when the string is used to perform some sort of serialization. In this case, the deserialization may fail depending on the executing PC locale... And you won't see this before the product is shipped on a platform with a different locale. I Prefer to take a few seconds to think about it (and take a reasonable decision about it) than regretting it later.
Maupertuis
A: 

I have checked it with visual studio 2008 (console application) and its not showing "," instead of "." , please provide more details. I think its issue of culture-info. please provide some more code details

class Program
{
    static void Main(string[] args)
    {
        Console.Write(GetNumber());
    }
    public static  decimal GetNumber()
    {
        return 250.00m;
    }

}
Rajesh Rolen- DotNet Developer