我有一个返回类似以下数字的方法:
public decimal GetNumber()
{
return 250.00m;
}
现在当这个值被输出到控制台时,例如它有一个逗号(250,00)而不是一个点(250.00)。我始终想要一个点,我做错了什么?
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);
}
}
https://dev59.com/y3RC5IYBdhLWcg3wVvnL#326071
。如果对象为空,则Tostring()可能会抛出异常。但是Convert.Tostring()将处理空对象并返回string.Empty。但在您的答案中,d
是非可空的,所以没有问题(如果它是可空的,则可能会引发错误)。如果我错了,请纠正我,传奇。:) @JonSkeet - ManirajSS正如Jon Skeet所解释的那样,您应该指定用于格式化字符串的文化:
var str = GetNumber().ToString(System.Globalization.CultureInfo.InvariantCulture);
在IT技术中,一个好的实践是始终使用指定区域性的ToString
重载。否则,.NET
将使用当前线程的Culture
,这会根据PC的语言环境不同而输出不同的strings
...
本地化格式?
http://en.wikipedia.org/wiki/File:DecimalSeparator.svg(绿色代表逗号,因此如果您在使用这些位置的文化信息调用ToString()
时,您将看到一个逗号)。
我已经使用Visual Studio 2008(控制台应用程序)进行了检查,它没有显示“,”而是显示“。”,请提供更多细节。我认为这是Culture-Info的问题,请提供更多代码细节。
class Program
{
static void Main(string[] args)
{
Console.Write(GetNumber());
}
public static decimal GetNumber()
{
return 250.00m;
}
}