0

我的表单中有一些文本框。我编写了休假事件的代码以自动添加 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.

4

2 回答 2

2

看起来您的最终目标是将值格式化为金钱。如果是这种情况,那么您可以使用方便的 Decimal.ToString("C")。您可能需要许多其他格式,请参阅此链接以获取有关格式的更多信息

于 2012-12-15T06:13:23.667 回答
2

你的问题在这里:

strtax.Substring(0, strtax.IndexOf(".") + 3);

我不相信Substring做你认为它做的事情。参数不是“startIndex”和“endIndex”(Beginning 和 End),它们是“startIndex”和“Length”(子字符串的开始和长度)。最有可能的是,这种混淆导致您尝试获取大于字符串大小的子字符串。

例如,您说我想要 "Test" 的最后 10 个字符。“测试”只有四个字符,因此尝试获取“最后十个”将导致该错误。

于 2012-12-15T05:55:24.310 回答