无法将类型'double'隐式转换为'string'

时间:2014-10-07 19:22:17

标签: c# asp.net

我正在制作一个程序来获取圆的半径并输出直径,面积和周长。我试图从直径开始,但我一直收到错误:不能隐式地将类型'double'转换为'string'。我已经使用整数完成了类似的程序,但我无法弄清楚我的生活,如何在文本框中接收浮点数并计算它们以便我可以输出它们。到目前为止,这是我的代码。

<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
 protected void Button1_Click(object sender, EventArgs e)
 {
 double pi = 3.14159;
 lblDiameter.Text = (double.Parse(radius.Text)) * (double.Parse(radius.Text));
 } 
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
 <title>Circles</title>
</head>

<body>
<form id="form1" runat="server">
    <div>
    <asp:TextBox
    id="radius"
     Runat="server" /> 
    <br /> 

    <asp:Button
    id="Button1"
    Text="Calculate"
    OnClick="Button1_Click" 
    Runat="server" />

    <asp:Label
    id="lblDiameter"
    Runat="server" />
</div>
</form>
</body>
</html> 

我哪里错了?

3 个答案:

答案 0 :(得分:2)

你可能只是错过了.ToString():

lblDiameter.Text = (double.Parse(radius.Text) * double.Parse(radius.Text)).ToString();

它更清晰,你可以通过将数字存储在局部变量中来避免解析字符串两次:

var value = double.Parse(radius.Text);
lblDiameter.Text = (value * value).ToString();

现在,直径是否真的等于半径的平方? ;)

答案 1 :(得分:1)

您收到错误是因为您正在处理等式右侧的双数据类型和左侧的字符串。

更改您的代码:

lblDiameter.Text = (double.Parse(radius.Text)) * (double.Parse(radius.Text));

要:

lblDiameter.Text = Convert.ToString((double.Parse(radius.Text)) * (double.Parse(radius.Text)));

或:

lblDiameter.Text = (double.Parse(radius.Text) * (double.Parse(radius.Text)).ToString();

或:

double radius = double.Parse(textBox1.Text);
lblDiameter.Text = (radius * radius).ToString();

此外,您不需要设置pi。 Math命名空间中有一个常量。

double pi = Math.PI;

我还建议设置一个半径变量来重复使用,而不是每次都使用(double.Parse(radius.Text)。就像我上面的例子一样。

double radius = double.Parse(textBox1.Text);

然后你可以做以下事情:

lblDiameter.Text = Convert.ToString(radius * radius);

lblDiameter.Text = (radius * radius).ToString();

此外:

double circum = (2 * pi) * radius;

答案 2 :(得分:0)

在代码行lblDiameter.Text = (double.Parse(radius.Text)) * (double.Parse(radius.Text));

当您将文本框的值解析为double时,左侧lblDiameter.Text被视为字符串而右侧是双精度。

这是你应该做的:

 double diameter = 0;

 diameter = double.Parse(radius.Text) * double.Parse(radius.Text);

现在在等式之后,您可以将“diameter”的值赋给lblDiameter,但是您必须将其转换为String:

lblDiameter.Text = diameter.ToString();

如果您愿意,您只能使用以下两行代码:

 double diameter = double.Parse(radius.Text) * double.Parse(radius.Text);
 lblDiameter.Text = diameter.ToString();