我的表单中有一些文本框。我在离开事件上写了代码,自动添加0.00。我编写代码将两个文本框值添加到第三个
try
{
decimal netVal = 0;
decimal.TryParse(txtNetValue.Text, out netVal);
decimal disc2 = 0;
decimal.TryParse(txtDisc2.Text, out disc2);
decimal tax1 = 0;
decimal.TryParse(txtTax1.Text, out tax1);
decimal tax = netVal - disc2;
string strtax = ((tax / 100) * tax1).ToString();
txtTax2.Text = strtax.Substring(0, strtax.IndexOf(".") + 3);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
在这种情况下,当我点击新按钮清除所有控件时,我将Index and length must refer to a location within the string. Parameter name: length
作为例外。
答案 0 :(得分:2)
您的问题在这里:
strtax.Substring(0, strtax.IndexOf(".") + 3);
我不相信Substring做你认为它做的事。参数不是“startIndex”和“endIndex”(Beginning和End),它们是“startIndex”和“Length”(Beginning和子串的长度)。最有可能的是,这种混淆导致您尝试获取大于字符串大小的子字符串。
例如,你说我想要“Test”的最后10个字符。 “测试”只有四个字符,因此尝试获取“最后十个”将导致该错误。
答案 1 :(得分:2)
看起来你的最终目标是将值格式化为金钱。如果是这种情况,那么您可以使用方便的Decimal.ToString(“C”)。您还可以使用许多其他格式see this link for more info on formatting。