首页 > 解决方案 > 使用 string.Format 时出现 FormatException 错误

问题描述

每次我尝试输入销售数量。运行此方法时输入字符串的格式不正确。

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);

在此处输入图像描述

标签: c#console

解决方案


您的问题在于(并且可能不限于)2P

的背景

a 中的大括号string.Format表示Format Item。它们由 Token Number表示,后面是可选:的和Format Specifier

令牌编号 {0}是将在该位置插入其字符串值的对象的索引。

解决方案

正如您在代码中看到的那样,您的代码不是以Item Number{2P:P2}格式开头的。它应该是{2:P2}

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

额外的

我可以建议引入字符串插值C#6,它更容易阅读,而且你不太可能犯这样的错误

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

推荐阅读