4

以下代码片段在第 1 行给了我编译器错误。

public abstract class xyz
{

    float Gamma = 20.0; //Line 1
    public class Alpha
    {
        void Beta()
        {
            System.out.println("this is atest");
        }
    }
}



abc0.java:5: error: possible loss of precision
        float density = 20.0;
                        ^
  required: float
  found:    double
2 errors

据我了解,浮点数用于十进制变量。

我是否遗漏了一些明显的东西,或者我应该总是使用强制转换来初始化十进制变量?

编辑:我知道'f'可以在最后用于浮点变量,但它是强制性的吗?

4

6 回答 6

7

double除非您指定它们只是s,否则浮点文字被视为floats。(类似地,整数文字是ints 除非另有说明。)将字母附加f到数字以使其成为float

float density = 20.0f;

JLS 具有全面的文字值类型规则。不,您不必将文字 a 设置为floatwith f,但是(float)如果您想将其放入float变量中,则必须将其转换为 with ,因为 Java 不会自动尝试将多个一种类型推入变量 with一个较小的范围。

于 2013-08-25T03:51:05.743 回答
2

应该

float density = 20.0f;
于 2013-08-25T03:49:33.240 回答
1

浮动密度 = 20.0f;

如果您尝试分配一个十进制数字,则必须在末尾放置一个“f”,否则 Java 会假定您正在尝试分配一个 double 。一个 double 将更准确地涵盖您可以输入的更多数字。

于 2013-08-25T03:52:53.273 回答
1

根据JLS,第 3.10.2 节,所有浮点文字都被解释为,double除非指定为float.

如果浮点文字以 ASCII 字母 F 或 f 为后缀,则它的类型为 float;否则,它的类型是双精度的,并且可以选择以 ASCII 字母 D 或 d 为后缀(第 4.2.3 节)。

将您的声明更改为:

float density = 20.0f;

一般来说,请考虑您使用的原因float- 它的精度低于double,并且几乎没有经常使用。

于 2013-08-25T03:53:00.717 回答
1

据我了解,浮点数用于十进制变量。

否。默认情况下,带有小数部分的数字文字被视为双精度数。

于 2013-08-25T03:54:26.143 回答
1

在 Java 中,十进制值默认存储为双精度值。但是为了将它存储为浮点数,我们需要明确声明,比如

浮动变量名 = 10.0f; 或 float varName = (float)10.0;

于 2019-06-09T11:13:31.263 回答