字符串以解析错误

时间:2011-05-24 20:46:34

标签: c# .net double

我有以下代码:

    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?你能帮我解决这个问题吗?在尝试联系你们之前,我已经花了几个小时试图解决这个问题。感谢!!!

3 个答案:

答案 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 overloadIFormatProvider(即文化),并确保格式字符串使用正确的字符不同的部分(标准千位分隔符为,标准小数点分隔符为. - 有关每个此类字符的含义,请参阅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