我有以下代码:
static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("mk-MK");
string s2 = "4.434,00";
double d;
if (Double.TryParse(s2, NumberStyles.Number, CultureInfo.CurrentCulture, out d))
{
//String.Format("{0:0.0,00}", d);
Console.WriteLine(d + " Type of: " + d.GetType());
}
else
{
Console.WriteLine("ne go parsirashe");
}
String.Format("{0:0.0,00}", d);
Console.WriteLine(d);
//Console.WriteLine(String.Format("{0:0,0.00}", d));
//Console.WriteLine(s2.GetType().ToString());
//Console.ReadLine();
//String.Format("{0:0.0,00}"
Console.ReadLine();
输出为:4434类型:System.Double 4434
为什么不是d的值格式为:4.434,00?你能帮我解决这个问题吗?在尝试联系你们之前,我已经花了几个小时试图解决这个问题。感谢!!!
答案 0 :(得分:1)
您正在丢弃格式化的字符串 - 您没有将其分配给字符串,只是将双精度输出到控制台(可以在其上调用ToString()
)。
试试这个:
string forDisplay = string.Format("{0:0.0,00}", d);
Console.WriteLine(forDisplay);
或者,甚至更短:
Console.WriteLine(string.Format("{0:0.0,00}", d));
更新
为了根据您的文化格式化字符串,您需要使用带有Format
overload的IFormatProvider
(即文化),并确保格式字符串使用正确的字符不同的部分(标准千位分隔符为,
,标准小数点分隔符为.
- 有关每个此类字符的含义,请参阅here在格式字符串中):
var res = String.Format(CultureInfo.CurrentCulture, "{0:0,0.00}", d);
Console.WriteLine(forDisplay);
结果:
4.434,00
答案 1 :(得分:1)
你的意思是:
string formatted = String.Format("{0:0.0,00}", d);
Console.WriteLine(formatted);
string.Format
返回一个字符串 - 它不会影响double
的格式,因为双打根本没有格式化。双打仅存储原始数值(内部为位)。
答案 2 :(得分:1)
如果我理解你要做的事情,那么.
和,
就会出错。
如果您阅读了MSDN上的Custom Numeric Format Strings页面,则可以看到您需要使用,
作为千位分隔符,.
作为小数点分隔符,以及(重要部分) )目标文化在这里无关紧要。无论当前的文化如何,格式总是相同的。
所以你想要使用的是:
Console.WriteLine("{0:0,0.00}", d);
然后输出是:
4434 Type of: System.Double
4.434,00