摄氏度到华氏度程序不会将双精度编译为浮点数错误

Celsius to Fahrenheit program wont compile double to float error

    /* 
    This program will convert Celsius to Fahrenheit and display a table 
    of their Fahrenheit equivalents.
    */
    // ---------1---------2---------3---------4---------5--------6---------7
    // 1234567890123456789012345678901234567890123456789012345678901234567890

    public class CelsiusToFarhenheit
    {
      public static void main(String[] args)
      {
          //Variables
          float fhdeg;
          float celdeg = 0;

      while (celdeg <= 20)
          {
             fhdeg = 1.8 * celdeg + 32;

          }
      if (celdeg <= 20)
          {
             System.out.printf( "    %3d C = %5.1f F\n", celdeg, fhdeg );
             celdeg++;
          }
      }
    }  

我一直收到这个错误...

CelsiusToFarhenheit.java:22: error: incompatible types: possible lossy conversion from double to float fhdeg = 1.8 * celdeg + 32; ^ 1 error

我不明白的是,如果我将它们初始化为浮点数...发生了什么事? 因为我无法让它初始化,所以我不知道我是否有任何其他错误,或者它是否会按照我想要的方式打印出 table。

fhdeg = 1.8 * celdeg + 32;

1.8double 类型的文字。当您将 doublefloat 相乘时,结果将是 double,这不适合 float。使用 f 后缀使其成为 float 文字:

fhdeg = 1.8f * celdeg + 32.0f;

1.8 是一个 double,并使整个表达式 1.8 * celdeg + 32 成为 double。 Java 拒绝在分配给 fhdeg.

时将此 double 隐式转换为 float

相反,您可以写成 fhdeg = (float)(1.8 * celdeg + 32);

这使计算保留为 double,并且仅在将值分配给 fhdeg 时转换为 float

简单来说,float(32 位)不能容纳 double(64 位)。选中 java docs,但您可以容纳双精度浮点数。

为了使您的程序正常运行,您需要通过后缀 f 将 1.8 转换为浮点数,即 1.8f 或将您的变量设为双精度。