15

我有一个返回这样的数字的方法:

public decimal GetNumber()
{
    return 250.00m;
}

现在,当这个值被打印到控制台时,它有一个逗号 (250,00) 而不是一个点 (250.00)。我总是想在这里指出一点,我做错了什么?

4

4 回答 4

50

decimal本身没有格式 - 它既没有逗号也没有点。

当您将其转换为字符串时,您就会得到它。你可以通过指定不变的文化来确保你得到一个点:

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);
    }
}
于 2010-10-06T07:09:54.880 回答
7

正如 Jon Skeet 所解释的,您应该指定用于格式化的文化string

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

ToString始终使用指定区域性的重载是一个好习惯。否则,.NET使用当前线程Culture,这将strings根据PC...的语言环境写入与输出不同的输出。

于 2010-10-06T07:13:49.973 回答
1

特定于区域设置的格式?

http://en.wikipedia.org/wiki/File:DecimalSeparator.svg(绿色等于逗号,因此如果您ToString()使用这些位置的文化信息调用小数点,您将看到一个逗号)。

于 2010-10-06T07:09:07.420 回答
0

我用visual studio 2008(控制台应用程序)检查了它,它没有显示“,”而不是“。” ,请提供更多详细信息。我认为它的文化信息问题。请提供更多代码详细信息

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

}
于 2010-10-06T07:15:16.593 回答