我是这里的新手。
我正在尝试使用编码显示平均值,最大值和最小值的统计信息。
他们说我无法将decimal[]
转换为int[]
时出现错误。我已在代码旁注释了以下错误。这是最后几行之一。
我必须为此项目使用Arrays
,并且值必须在decimal
中。
谢谢你,如果我做错了事,我是新来的。
namespace Group_Project_Final
{
public partial class LoanRates : Form
{
public LoanRates()
{
InitializeComponent();
}
private double Average (int [] iArray)
{
int total = 0;
double average;
for(int index=0;index<iArray.Length;index++)
{
total += iArray[index];
}
average = (double)total / iArray.Length;
return average;
}
private decimal Highest (int [] iArray)
{
int highest = iArray[0];
for (int index =1; index<iArray.Length;index++)
{
if(iArray[index]>highest)
{
highest = iArray[index];
}
}
return highest;
}
private decimal Lowest(int [] iArray)
{
int lowest = iArray[0];
for (int index =1; index<iArray.Length; index++)
{
if(iArray[index]<lowest)
{
lowest = iArray[index];
}
}
return lowest;
}
private void button6_Click(object sender, EventArgs e)
{
Home form1 = new Home();
form1.Show();
}
private void button7_Click(object sender, EventArgs e)
{
decimal [] rates = { 1.60m, 1.65m ,1.62m, 1.55m, 1.68m, 1.58m };
int index = 0;
decimal highestRate;
decimal lowestRate;
double averageRate;
while(index<rates.Length)
{
decimal.ToInt32(rates[index]);
index++;
}
highestRate = Highest(rates); //i am having the error here where they say "cannot simply convert decimal[] to int[]
lowestRate = Lowest(rates);
averageRate = Average(rates);
txtAvg.Text = averageRate.ToString();
txtHighest.Text = highestRate.ToString();
txtLowest.Text = lowestRate.ToString();
}
}
}
答案 0 :(得分:4)
只需将它放在那里,
仅使用linq的BCL方法,您可以减少90%的代码。
它立即解决了您的投射和打字问题
using System.Linq;
...
private void button7_Click(object sender, EventArgs e)
{
decimal[] rates = { 1.60m, 1.65m, 1.62m, 1.55m, 1.68m, 1.58m };
txtAvg.Text = rates.Max().ToString();
txtHighest.Text = rates.Min().ToString();
txtLowest.Text = rates.Average().ToString();
}
答案 1 :(得分:2)
如果需要decimal
数组,请根据decimal
更改函数。
private double Average(decimal[] iArray)
{
decimal total = 0;
double average;
for (int index = 0; index < iArray.Length; index++)
{
total += iArray[index];
}
average = (double)total / iArray.Length;
return average;
}
private decimal Highest(decimal[] iArray)
{
decimal highest = iArray[0];
for (int index = 1; index < iArray.Length; index++)
{
if (iArray[index] > highest)
{
highest = iArray[index];
}
}
return highest;
}
private decimal Lowest(decimal[] iArray)
{
decimal lowest = iArray[0];
for (int index = 1; index < iArray.Length; index++)
{
if (iArray[index] < lowest)
{
lowest = iArray[index];
}
}
return lowest;
}
答案 2 :(得分:2)
现在,您的函数Lowest
和Highest
采用int
数组,而不是decimal
数组。现在,您的行decimal.ToInt32(rates[index]);
无济于事,因为它只是解决了该索引的等效int
值,但没有在任何地方分配它,从而导致丢失。您需要创建一个新的整数数组,然后通过循环将每个值添加到其中,如下所示:
int[] integerRates = new int[6];
while(index<rates.Length)
{
integerRates[index] = decimal.ToInt32(rates[index]);
index++;
}
highestRate = Highest(integerRates);
lowestRate = Lowest(integerRates);
averageRate = Average(integerRates);
或更改其他函数的输入参数以代替接受decimal
数组(根据Masoomian的回答),这也将使您的while
循环多余。这可能是处理它的更好方法,因为您不会损失小数位数的准确性。
最好的解决方案是按照TheGeneral建议使用Linq
。尽管我怀疑这是针对学校项目的,但他们可能想教循环和if语句。