【问题标题】:how to get output of a variable as float value如何将变量的输出作为浮点值
【发布时间】:2010-05-19 19:08:16
【问题描述】:

我有以下问题.. 想要得到浮点数的结果

假设

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”。

请帮助..我怎样才能得到浮动答案...

【问题讨论】:

  • 为什么要将它作为浮点数而不是双精度数?在大多数系统上,double 是精度更高的浮点值。

标签: c# casting floating-point


【解决方案1】:

把你的代码改成

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

【讨论】:

  • 或者你这样做:float ans= (float)math.sqrt(a*b);
  • 也许是 MUG4N,但我认为这里真正的问题不是将值转换为浮点数,而是他为什么使用浮点数。
【解决方案2】:

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

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

  1. 显式转换:float ans = (float)Math.Sqrt(a*b);
  2. 使用双精度:double ans = Math.Sqrt(a*b);

在这两者中,我推荐后者。

附带说明一下,反向转换是可以的,因为 double 始终可以准确地表示您在浮点变量中可能找到的任何内容。例如,从类型系统的角度来看,这是完全可以的:

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

【讨论】:

    【解决方案3】:

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

    1. 将返回的 double 转换为 float,如下所示: float ans = (float)Math.sqrt(a * b);
    2. 将 ans 的类型更改为 double: double ans = Math.sqrt(a * b);

    在大多数情况下,选项 2 是您的最佳选择,除非您特别需要浮点数,因为双精度值更高。

    【讨论】:

      【解决方案4】:

      您可以直接转换为浮点数。

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

      【讨论】:

        【解决方案5】:

        您需要将结果显式转换为 double 的值范围大于 float(16 位到 7 位):

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

        但除非您有未告诉我们的原因,否则请使用double

        【讨论】:

          【解决方案6】:
          float ans= math.sqrt(a*b); 
          

          应该是

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

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

          【讨论】:

            【解决方案7】:

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

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-03-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-04
              • 1970-01-01
              相关资源
              最近更新 更多