String.Format Вопрос - PullRequest
       6

String.Format Вопрос

0 голосов
/ 21 августа 2009

MSDN предоставляет пример заполнителя цифры:
1234.5678 ("#####") -> 1235
Мне показалось, что это сбивает с толку (я ожидал 1234 или что-то в этом роде), поэтому я написал этот фрагмент на C # для проверки:

Console.WriteLine(String.Format("{0:#}", 1234.5678));
Console.WriteLine(String.Format("{0:#####}", 1234.5678));
Console.WriteLine(String.Format("{0:#}", "1234.5678"));
Console.WriteLine(String.Format("{0:#####}", "1234.5678"));

Это дает такой вывод:

1235
1235
1234.5678
1234.5678

Пожалуйста, объясните.

Ответы [ 6 ]

13 голосов
/ 21 августа 2009

Первые два вызова String.Format форматируют число (десятичное) значение. В строке формата задана только целая часть (до десятичной точки), поэтому значение округляется.

Вторые два вызова String.Format форматируют значение string , которое содержит строковое представление числа. В результате вы получаете именно то, что предоставили. Заполнитель цифр применяется только к числовым значениям, которые переданы в String.Format.

2 голосов
/ 21 августа 2009

Попробуйте:

Console.WriteLine(String.Format("{0:#####.##}", 1234.5678));

Что даст 1234,57

Вам необходимо указать десятичное место. Кроме того, последние два являются строками, поэтому числовые форматы не будут применяться.

0 голосов
/ 21 августа 2009

Первые два числа, поэтому применяется форматирование, они округляются, а десятичная дробь выбрасывается. Вторые два являются строками, поэтому к ним не применяется форматирование чисел.

0 голосов
/ 21 августа 2009

Как указано в статье MSDN, которую вы связали, спецификатор формата ('#') применяется только к числовым типам.

Спецификаторы пользовательских числовых форматов поддерживаются всеми числовыми типами в библиотеке классов .NET Framework. К ним относятся типы BigInteger, Byte, Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16, UInt32 и UInt64.

Вы передаете строку без числового типа в третьей и четвертой строке, следовательно, форматирование не применяется.

0 голосов
/ 21 августа 2009

В первых двух форматах вы указываете без десятичных разрядов, поэтому он будет округлять число соответственно. Последние две строки не форматируют числа, вы форматируете строки, поэтому числовое форматирование не применяется.

0 голосов
/ 21 августа 2009

Числа округляются, так как в шаблоне не определены десятичные разряды. Строки не округляются, так как они являются строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...