Ошибка FormatException при использовании string.Format - PullRequest
0 голосов
/ 29 октября 2018

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

int numberOfSales = 0;
double[] sales;
Console.Write("Please enter number of sales: ");
numberOfSales = Convert.ToInt32(Console.ReadLine());
sales = new double[numberOfSales];

for (int i = 0; i < numberOfSales; i++)
{

   Console.Write("Please enter  sales #{0}:", i + 1);

   sales[i] = Convert.ToDouble(Console.ReadLine());
}

double sum = sales.Sum();

for (int i = 0; i < numberOfSales; i++)
{

   double contrubution = sales[i] / sum;

   Console.WriteLine("Sale # {0} was {1:C2} and contributed {2P:P2}", i + 1, sales[i], contrubution);
}

Console.WriteLine("Total sum of sales is {0:C2}", sum);

enter image description here

1 Ответ

0 голосов
/ 29 октября 2018

Ваша проблема с (и не может быть ограничена) 2P.

Фон

Скобки в string.Format обозначают Элемент формата . Они представлены токеном Число , за которым следует и необязательно : и Спецификатор формата .

Токен Число {0} - это Индекс объекта, строковое значение которого будет вставлено в эту позицию.

Решить

Как вы можете видеть в своем коде, у вас есть {2P:P2}, который не начинается с формата Номер позиции . Должно быть {2:P2}

Console.WriteLine("Sale # {0} was {1:C2} and contributed {2:P2}", i + 1, sales[i], contrubution);
** * 1035 1036 * Дополнительный

Могу ли я предложить интерполяцию строк , которая была введена в C#6, вместо этого ее легче читать, и менее вероятно, что вы допустите ошибку, подобную этой

Console.WriteLine($"Sale # {(i + 1)} was {sales[i]:C2} and contributed {contrubution:P2}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...