2013-12-16 49 views
1

我正在构建一个将分数转换为百分比的应用程序。我希望如此,如果我编辑分数中的文本,它会刷新并重新计算百分比。此代码为什么会导致ArgumentOutOfRangeException?

当我测试它时,我第一次编辑它没有错误的分数,并且工作正常,但是第二次我改变了分数中的错误。我得到这个错误

类型System.ArgumentOutOfRangeException未处理的异常出现在mscorlib.dll

我能做些什么来解决这个问题?

我对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,6))',它以某种方式被调用的字符串少于6个字符。 –

+1

这是'Substring'调用之一。停止使用Substring格式化双输出。使用格式说明符:http://msdn.microsoft.com/en-us/library/kfsatb94(v=vs.110).aspx –

回答

0

从你提供我可以告诉大家,一个代码您的Substring方法会抛出此异常,因此它的第二个参数可能无效(小于0或高于字符串长度)。请检查msdn以获取详细信息:http://msdn.microsoft.com/ru-ru/library/aka44szs%28v=vs.110%29.aspx

正如在mike z的评论中所述,您应该使用格式字符串而不是Substring方法来格式化您的输出。例如doubleValue.ToString("#.####")将返回小数部分的4位数字。

0

使用yourDoubleExpr.ToString("P4")将数字转换为百分比字符串。乘以100.0是自动的。

你的问题是情况下,像(3.0/4.0).ToString()导致短字符串,如"0.75",你不能拿出长度6从一个.Substring

相关问题