我正在构建一个将分数转换为百分比的应用程序。我想要它,这样如果我编辑分数中的文本,它会刷新并重新计算百分比。
当我测试它时,我第一次编辑它没有错误的分数并且工作正常但是第二次我改变它的错误部分中的某些东西。我收到此错误
mscorlib.dll中发生类型为System.ArgumentOutOfRangeException的未处理异常
我该怎么做才能解决这个问题?
我是C#的新手,所以如果可能的话,尽量把它愚蠢。
其他信息:索引和长度必须引用字符串中的位置。“
这是我到目前为止所拥有的:
private void fractionNumerator_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsNumber(e.KeyChar) || ((e.KeyChar) == Convert.ToChar(Keys.Back))))
{
e.Handled = true;
}
else
{
if (!((fractionNumerator.Text == "") && (fractionDenominator.Text == "")))
{
if ((e.KeyChar == Convert.ToChar(Keys.Back)))
{
string numer = (fractionNumerator.Text.Substring(0, (fractionNumerator.Text.Length) - 1));
string denom = (fractionDenominator.Text);
outputPercentage.Text = (((((Convert.ToDouble(numer) / Convert.ToDouble(denom)) * 100).ToString()).Substring(0, 6)) + "%");
}
else
{
string numer = ((fractionNumerator.Text) + e.KeyChar.ToString());
string denom = (fractionDenominator.Text);
outputPercentage.Text = (((Convert.ToDouble(numer)/Convert.ToDouble(denom)*100).ToString()).Substring(0, 6));
}
}
}
}
private void fractionDenominator_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsNumber(e.KeyChar) || ((e.KeyChar) == Convert.ToChar(Keys.Back))))
{
e.Handled = true;
}
else
{
if (!((fractionNumerator.Text == "") && (fractionDenominator.Text == "")))
{
if ((e.KeyChar == Convert.ToChar(Keys.Back)))
{
string denom = (fractionDenominator.Text.Substring(0, (fractionDenominator.Text.Length) - 1));
string numer = (fractionNumerator.Text);
outputPercentage.Text = (((((Convert.ToDouble(numer) / Convert.ToDouble(denom)) * 100).ToString()).Substring(0, 6)) + "%");
}
else
{
string denom = ((fractionDenominator.Text) + e.KeyChar.ToString());
string numer = (fractionNumerator.Text);
outputPercentage.Text = (((Convert.ToDouble(numer) / Convert.ToDouble(denom) * 100).ToString()).Substring(0, 6));
}
}
}
}
答案 0 :(得分:0)
从您提供的代码我可以看出您的Substring
方法之一会引发此异常。所以它可能有无效的第二个参数(它小于0或高于字符串长度)。检查msdn以获取详细信息:http://msdn.microsoft.com/ru-ru/library/aka44szs%28v=vs.110%29.aspx
正如 mike z 的评论中所提到的,您应该使用格式字符串而不是Substring
方法来格式化输出。例如,doubleValue.ToString("#.####")
将返回小数部分的4位数。
答案 1 :(得分:0)
使用yourDoubleExpr.ToString("P4")
将数字转换为百分比字符串。乘以100.0
是自动的。
您的问题是像(3.0 / 4.0).ToString()
这样的情况会导致短字符串,例如"0.75"
,而您无法从中获取.Substring
长度6
。