String.Format в C # не возвращает измененное значение int - PullRequest
4 голосов
/ 05 октября 2010

Я пытаюсь вернуть значение int с разделителями-запятыми внутри значения.

12345 будет возвращено как 12,345

Следующий код работает:

int myInt = 1234567;
MessageBox.Show(string.Format("My number is {0}", myInt.ToString("#,#")));

12,345 отображается как ожидалось.

Хотя следующий код не работает, но из того, что я читаю, должен работать:

int myInt = 1234567;
MessageBox.Show(string.Format("My number is {0:#,#}", myInt.ToString()));

12345 отображается.

МожетВы помогаете мне понять, почему второй набор кода не работает?

Спасибо

Ответы [ 4 ]

10 голосов
/ 05 октября 2010

Вы не должны ToString int перед форматом.Попробуйте это:

MessageBox.Show(string.Format("My number is {0:#,#}", myInt));
4 голосов
/ 05 октября 2010

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

MessageBox.Show(string.Format("My number is {0:#,#}", myInt));
2 голосов
/ 05 октября 2010

myInt.ToString() является избыточным, так как вы используете String.Format().Смысл String.Format состоит в том, чтобы предоставить набор объектов, и он создаст для вас строку.Нет необходимости преобразовывать его в string.

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

Когда вы присваиваете Format методу string, он не учитывает никакого числового форматирования, поскольку он уже имеет тип string.

int myInt = 1234567;
MessageBox.Show(string.Format("My number is {0:#,#}", myInt));
1 голос
/ 05 октября 2010

Когда вы используете строки формата "inline", как во втором примере, входные данные для параметра должны быть исходными (то есть int, double или что-то еще), чтобы строка формата могла с ней что-то сделать полезное.

Таким образом, пропуск ToString во втором вызове будет делать то, что вы хотите:

int myInt = 1234567;
MessageBox.Show(string.Format("My number is {0:#,#}", myInt));
...