Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Как использовать спецификаторы формата?

#c_sharp


Недавно начал изучать C#, сейчас наткнулся на непонятную мини-тему. Перечитал 20
раз, то ли спать хочу, то ли настолько туп. Но не понимаю ничего. Мб кто сможет вкратце
объяснить, или скинуть статью на более понятном языке.

Цитата из учебника Шилдта:


  Но ведь основное назначение спецификаторов формата — управлять внешним видом
  выводимых данных. Чаще всего форматированию подлежат следующие типы данных:
  с плавающей точкой и десятичный. Самый простой способ указать формат данных —
  описать шаблон, который будет использоваться в методе WriteLine(). Для этого указывается
образец требуемого формата с помощью символов #, обозначающих разряды чисел. Кроме
того, можно указать десятичную точку и запятые, разделяющие цифры.
  
  Ниже приведен пример более подходящего вывода результата деления 10 на 3.

Console.WriteLine("Деление 10/3 дает: (0:#.##)", 10.0/3.0);

  
  Выполнение этого оператора приводит к следующему результату.

Деление 10/3 дает: 3.33

  
  В данном примере шаблон #.## указывает методу WriteLine() отобразить два
  десятичных разряда в дробной части числа. Следует, однако, иметь в виду, что метод
WriteLine() может отобразить столько цифр слева от десятичной точки, сколько потребуется
для правильной интерпретации выводимого значения.
  
  Рассмотрим еще один пример. Оператор

Console.WriteLine("{0:###,###.##}", 123456.56);

  
  дает следующий результат.

123,456.56"



Так и не понял, как, когда, почему и зачем используется "#"
    


Ответы

Ответ 1



# - это необязательная цифра. Т. е. если там все нули, то ничего не выводится. 0 - это обязательная цифра. 0.## - выводить не более двух знаков после запятой. 0.00 - выводить ровно 2 знака после запятой. #,##0.0 - выводить с разделителем разрядов каждые 3 цифры и один знак после запятой. 0,000.# - выводить минимум 4 цифры в целой части с разделителем разрядов и не более одного знака после запятой. Пример http://ideone.com/eq1IpM using System; public class Test { public static void Main() { var formats = new string [] {"#", "0", "0.##", "0.00", "#,##0.0", "0,000.#"}; var numbers = new double [] {0.127, 0.17, 0.7, 1, 1.128, 1.16, 1.8, 10, 10.88, 1000000, 1000000.8}; foreach (var f in formats) foreach (var x in numbers) Console.WriteLine("'{0}' as '{1}' is '{0:" + f + "}'", x, f); } } Или в виде таблицы http://ideone.com/31Dkz8 body { margin: 0; } table, th, td { font-family: monospace; text-align: right; border: 1px solid; border-collapse: collapse; padding: .125em .25em; margin: auto; }
#00.##0.00#,##0.00,000.#
0.12700.130.130.10,000.1
0.1700.170.170.20,000.2
0.7110.70.700.70,000.7
11111.001.00,001
1.128111.131.131.10,001.1
1.16111.161.161.20,001.2
1.8221.81.801.80,001.8
1010101010.0010.00,010
10.88111110.8810.8810.90,010.9
10000001000000100000010000001000000.001,000,000.01,000,000
1000000.8100000110000011000000.81000000.801,000,000.81,000,000.8


Ответ 2



Описатель формата "#" - заместитель цифры. Описание Заменяет знак "#" соответствующей цифрой, если такая имеется. В противном случае в результирующей строке не будет цифры. Обратите внимание, что в итоговой строке не будет отображаться цифра, если соответствующей цифрой в строке ввода является незначащий 0. Например, 0003 ("####") -> 3. Описатель настраиваемого формата "#" служит символом-заполнителем для цифр. Если в форматируемом значении на позиции, где в строке формата присутствует символ "#", есть цифра, то эта цифра копируется в результирующую строку. В противном случае в выходной строке на этой позиции ничего не записывается. Обратите внимание, что при использовании этого описателя незначащие нули не отображаются, даже если ноль является единственной цифрой в строке. Ноль отображается только в том случае, если он является значащей цифрой отображаемого числа. Строка формата "##" приводит к округлению значения до ближайшего значения цифры, предшествующей десятичному разделителю, если назначено использование округления от нуля. Например, в результате форматирования числа 34,5 с помощью строки "##" будет получена строка со значением "35". Примеры #1 1234.5678 ("#####") -> 1235 0.45678 ("#.##", en-US) -> .46 0.45678 ("#.##", fr-FR) -> ,46 #2 double value; value = 1.2; Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture)); Console.WriteLine(String.Format(CultureInfo.InvariantCulture, "{0:#.##}", value)); // Displays 1.2 value = 123; Console.WriteLine(value.ToString("#####")); Console.WriteLine(String.Format("{0:#####}", value)); // Displays 123 value = 123456; Console.WriteLine(value.ToString("[##-##-##]")); Console.WriteLine(String.Format("{0:[##-##-##]}", value)); // Displays [12-34-56] value = 1234567890; Console.WriteLine(value.ToString("#")); Console.WriteLine(String.Format("{0:#}", value)); // Displays 1234567890 Console.WriteLine(value.ToString("(###) ###-####")); Console.WriteLine(String.Format("{0:(###) ###-####}", value)); // Displays (123) 456-7890 Полезные ссылки для изучения: Строки настраиваемых числовых форматов Настраиваемый описатель "#" Типы форматирования в .NET Framework P.S: Вся необходимая информация содержится на сайте MSDN и была взята оттуда.

Комментариев нет:

Отправить комментарий