Что такое формат ToString(N0)?

Этот код взят из книги Чарльза Петцольда "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.


person Alex F    schedule 25.04.2013    source источник


Ответы (5)


Ознакомьтесь с following article в MSDN о примерах формата 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).
person Darin Dimitrov    schedule 25.04.2013
comment
Было бы неплохо знать, что N0 из 1054,56 возвращает 1055, а не 1054. Вполне актуально! - person Xavier Egea; 22.12.2016

Вот где документация:

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 ) );
person nurettin    schedule 25.04.2013

Вот хорошее начало, может быть

Double.ToString()

Посмотрите в примерах ряд различных вариантов форматирования Double.ToString(string)

person skyfoot    schedule 25.04.2013

Вы можете найти список форматов здесь (в Double.ToString( )-MSDN-Article) в качестве комментариев в разделе примеров.

person jAC    schedule 25.04.2013

Это своего рода спецификатор формата для форматирования числовых результатов. На ссылка.

Что делает 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
person snr    schedule 25.11.2019