C#小数分隔符?

gra*_*ady 15 c# decimal separator

我有一个返回如下数字的方法:

public decimal GetNumber()
{
    return 250.00m;
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 49

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Eil*_*aee 7

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

var str = GetNumber().ToString(System.Globalization.CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

始终使用ToString指定文化的重载是一种很好的做法.否则,.NET使用当前线程Culture,strings根据PC... 的语言环境,它将写入不同的输出.

  • 是的,我同意你的看法.当字符串将在UI中使用时,这是一种有效的行为.但是当字符串用于执行某种序列化时,它可能是一个真正的问题.在这种情况下,反序列化可能会失败,具体取决于正在执行的PC区域设置...在产品在具有不同区域设置的平台上发货之前,您不会看到此信息.我宁愿花几秒钟思考它(并做出合理的决定),而不是后来后悔. (2认同)