2

在 Page1.aspx 上,我有 3 个带有比较验证器的 txtBoxes,确保它们是货币类型。

在 Page2.aspx 上,我有另一个名为 txtResult 的文本框,它的作用是在 Page1 上单击 btnCalculate 时显示其他 3 个 txtBoxes 的总和。

问题:我无法将 3 个 txtBoxes 视为双精度而不是字符串。如果 txtBox 的值为 1、3 和 8,则 txtResult 将为 138 而不是 12。

我尝试解析但不允许编译失败。

Page1后面的代码:

protected void btnCalculate_Click(object sender, EventArgs e)
{
    if (IsValid)
    {
        Server.Transfer("Page2.aspx");
    }
}

Page2背后的代码:

if (!IsPostBack)
{
    Page lastPage = (Page)Context.Handler;
    txtResult.Text = ((TextBox)lastPage.FindControl("txtGross")).Text
        + ((TextBox)lastPage.FindControl("txtValueOfAssets")).Text
        + ((TextBox)lastPage.FindControl("txtInvestments")).Text;
}

尝试使用TryParse

txtResult.Text = 
    double.TryParse(((TextBox)lastPage.FindControl("txtGross")).‌​Text, out gross);

错误:

不能将 bool 隐式转换为字符串

4

3 回答 3

2

您可以使用 Double.Parse(text) 将文本转换为双精度。例如:

txtResult.Text = (Double.Parse(((TextBox)lastPage.FindControl("txtGross")).Text)
    + Double.Parse(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text)
    + Double.Parse(((TextBox)lastPage.FindControl("txtInvestments")).Text)).ToString();

请注意,我需要将整个内容包装在 .ToString() 中,以将答案转换回文本,以便将其分配给 .ToString() txtResult.Text。我在长语句中提供了答案,因为问题使用了一个长语句,但通常我将每个值转换为双精度并将它们放在单独的双变量中,然后我会将它们添加到另一个语句中,最后在另一个语句中我'd 将答案转换为字符串并将其放在文本框中。我发现这种多语句方法更易于阅读和消化,但这只是个人喜好。

于 2017-01-31T20:59:36.443 回答
0

TextBox 的 Text 属性是 String 类型,因此添加它们将导致连接。在添加之前,您需要将 Text 值转换为 double。

一个简单的转换方法是Convert.ToDouble("")

所以试试这个: txtResult.Text = Convert.ToDouble(((TextBox)lastPage.FindControl("txtGross")).Text) + Convert.ToDouble(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text) + Convert.ToDouble(((TextBox)lastPage.FindControl("txtInvestments")).Text);

于 2017-01-31T20:55:30.710 回答
0

由于您的值是字符串,因此它们被视为字符串,并且正在连接。

您需要先将这些值转换为 Double,然后再进行添加。

这篇文章在这里讨论了一些转换为双精度的方法: Converting string to double in C#

本质上,您可以使用 Convert.ToDouble() 方法将文本框 Text 值转换为双精度值。

Convert.ToDouble(((TextBox)lastPage.FindControl("txtValueOfAssets")).Text)

最好的方法是查看 TryParse() 方法,以确保您的代码在输入非数字字符串时不会中断。

于 2017-01-31T20:56:07.250 回答