什么是ToString("N0")格式?

92

这段代码来自Charles Pettzold的《Windows编程第六版》书籍:

public object Convert(object value, Type targetType, object parameter, string language) 
{ 
    return ((double)value).ToString("N0"); 
}

ToString("N0")应该会打印带有逗号分隔符且没有小数点的值。我找不到适当的ToString重载和"N0"格式的参考文献。请指引我在.NET文档中查找正确的内容。

5个回答

178

请查看MSDN上有关N格式示例的以下文章。这也在标准数值格式字符串文章中涵盖。

相关摘录:

//       Formatting of 1054.32179:
//          N:                     1,054.32 
//          N0:                    1,054 
//          N1:                    1,054.3 
//          N2:                    1,054.32 
//          N3:                    1,054.322 
当精度说明符控制结果字符串中的小数位数时,结果字符串反映出四舍五入到最接近无限精确结果的可表示结果。如果有两个等距离的可表示结果:
  • 在.NET Framework和.NET Core直到.NET Core 2.0上,运行时会选择具有更大最低有效位数的结果(即使用MidpointRounding.AwayFromZero)。
  • 在.NET Core 2.1及更高版本上,运行时将选择带有偶数最低有效数字的结果(即使用MidpointRounding.ToEven)。

57
知道当1054.56的四舍五入取整结果为1,055而不是1,054会很有用,这非常重要! - Xavier Egea

4
这是文档所在地:

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

数值(“N”)格式说明符将数字转换为字符串的形式为“-d,ddd,ddd.ddd ...”,其中“-”表示负号,如果需要,则为负数符号,“d”表示数字(0-9)...

这是默认值(2)的说明:

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.numberdecimaldigits.aspx

      // Displays a negative value with the default number of decimal digits (2).
      Int64 myInt = -1234;
      Console.WriteLine( myInt.ToString( "N", nfi ) );

2

1

您可以在示例部分中,将格式列表此处(在Double.ToString()-MSDN文章中)作为注释找到。


0

它是一种格式说明符,用于格式化数字结果。 还有其他的说明符在链接上

N 的作用是根据您的CultureInfo将数字分成千位小数,并表示浮点部分中仅有2个小数位,如N2,如果必要,会四舍五入最右边的数字。

N0 不表示任何小数位,但会应用四舍五入。

让我们举个例子。

using System;
using System.Globalization;


namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            double x = 567892.98789;
            CultureInfo someCulture = new CultureInfo("da-DK", false);

            // 10 means left-padded = right-alignment
            Console.WriteLine(String.Format(someCulture, "{0:N} denmark", x));
            Console.WriteLine("{0,10:N} us", x); 

            // watch out rounding 567,893
            Console.WriteLine(String.Format(someCulture, "{0,10:N0}", x)); 
            Console.WriteLine("{0,10:N0}", x);

            Console.WriteLine(String.Format(someCulture, "{0,10:N5}", x));
            Console.WriteLine("{0,10:N5}", x);


            Console.ReadKey();

        }
    }
}

它产生了以下结果,

567.892,99 denmark
567,892.99 us
   567.893
   567,893
567.892,98789
567,892.98789

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接