如何将变量的输出作为浮点值

时间:2010-05-19 19:08:16

标签: c# casting floating-point

我有以下问题.. 想要以浮动结果获得结果

假设

int a= convert.toint32(textbox1.text);
int b= convert.toint32(textbox2.text);

float ans= math.sqrt(a*b);
label1.text= ans.tostring();

输出..

a=7
b=3

ans应为= 4.582 但我得到一个错误

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

请帮助......我可以得到漂浮物......

7 个答案:

答案 0 :(得分:3)

将您的代码更改为

double ans = math.sqrt(a*b);

答案 1 :(得分:1)

double只是一个更大的浮动。 Math.Sqrt()返回一个double,而不是float。您可以在double中使用比float类型可以准确表示的更多数字,因此在您的代码中,编译器不能保证自动转换不会丢失重要数据,因此例外。

要解决这个问题,您有两种选择:

  1. 显式演员:float ans = (float)Math.Sqrt(a*b);
  2. 使用双人:double ans = Math.Sqrt(a*b);
  3. 在这两者中,我推荐后者。

    作为旁注,反向转换是可以的,因为double总能准确地表示您在float变量中可能找到的任何内容。例如,从类型系统的角度来看,这是完全可以的:

    float divide(int a, int b) { return a/(float)b;}
    double ans = divide(5,2);
    

答案 2 :(得分:1)

Math.sqrts返回值是double。所以,你有两个选择。

  1. 将返回的double转换为float,如下所示: float ans = (float)Math.sqrt(a * b);
  2. 将ans的类型更改为double: double ans = Math.sqrt(a * b);
  3. 在大多数情况下,选项2将是您的最佳选择,除非您特别需要浮点数,因为double是更高的精度值。

答案 3 :(得分:1)

你可以直接投射到浮动。

 float ans = (float)Math.Sqrt( a * b );

答案 4 :(得分:0)

您需要显式转换结果,因为double的值范围比float(16位数到7)更大:

  float ans= (float)Math.Sqrt(a*b);

但除非你有理由没有告诉我们,否则只需使用double

答案 5 :(得分:0)

float ans= math.sqrt(a*b); 

应该是

float ans= (float)Math.Sqrt(a*b); 

您需要显式转换为float,因为此转换会导致信息丢失,因此编译器不会自动为您投射。这样编译器就可以确保有损转换是有意的。

答案 6 :(得分:0)

Math.Sqrt方法返回类型为double的值。

但是您尝试将此值设置为float类型。但double没有隐式转换为float。所以替代方案:

  • 将答案声明为doubledouble ans = Math.Sqrt(a*b)

  • 或显式将结果转换为 float类型:(float)Math.Sqrt(a*b)