【问题标题】:What is ToString("N0") format?ToString("N0") 格式是什么?
【发布时间】:2013-04-19 00:55:04
【问题描述】:

这段代码来自 Charles Pettzold 的“Programming Windows Sixth Edition”一书:

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

ToString("N0") 应该打印带有逗号分隔符且没有小数点的值。我在文档中找不到对适当ToString 重载和"N0" 格式的引用。请指出我在 .NET 文档中的正确位置。

【问题讨论】:

    标签: c# .net number-formatting


    【解决方案1】:

    它是一种用于格式化数字结果的格式说明符。还有额外的说明符on the link

    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
    

    【讨论】:

      【解决方案2】:

      查看 MSDN 上的 following article,了解 N 格式的示例。 Standard Numeric Format Strings 文章也对此进行了介绍。

      相关摘录:

      //       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)。

      【讨论】:

      • 很高兴知道 1054.56 的 N0 返回 1,055 而不是 1,054。非常相关!
      【解决方案3】:

      这是文档所在的位置:

      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 ) );
      

      【讨论】:

        【解决方案4】:

        您可以在示例部分找到格式列表here(在 Double.ToString()-MSDN-Article 中)作为 cmets。

        【讨论】:

          【解决方案5】:

          也许这是一个好的开始

          Double.ToString()

          查看示例以了解许多不同的格式化选项Double.ToString(string)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-03-12
            • 2018-08-12
            • 1970-01-01
            • 2011-02-27
            • 2012-05-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多