Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我必须把f设置为变量float的值f=5.67f?_Java - Fatal编程技术网

Java 为什么我必须把f设置为变量float的值f=5.67f?

Java 为什么我必须把f设置为变量float的值f=5.67f?,java,Java,为什么我必须将f放入变量f float f =5.67f; 我知道double变量可以接受比float 但是为什么我必须在5.67之后添加f,而我已经说过它是float变量 当我已经说过它是浮动变量时 您知道,编译器不会——它会尝试从double隐式转换为float,因为默认情况下5.67被解释为double 当你写float时f=5.67编译器不知道5.67是float而不是double,因为5.67的默认类型是double float的精度小于double的精度,因此无法进行隐式转换,并

为什么我必须将
f
放入变量
f

float f =5.67f;
我知道
double
变量可以接受比
float
但是为什么我必须在
5.67
之后添加
f
,而我已经说过它是
float
变量

当我已经说过它是浮动变量时

您知道,编译器不会——它会尝试从
double
隐式转换为
float
,因为默认情况下
5.67
被解释为
double


当你写
float时f=5.67
编译器不知道
5.67
float
而不是
double
,因为
5.67
的默认类型是
double


float
的精度小于
double
的精度,因此无法进行隐式转换,并将产生错误“类型不匹配:无法从double转换为float”。

后缀告诉编译器如何解释该值。编译器将5.67视为双精度,因为这是默认行为。f告诉编译器将其视为浮点。

因为您可以通过计算初始化变量:例如,double d=5.4f/2f。

您已经说过f是浮点,但默认情况下,文本5.67是double,您必须另外声明


就像
SomeObject o=newsomeobject()两者需要一致(或能够转换)。double不能自动转换为float,因此您必须明确地说5.67是一个float而不是double。

在Java中,只能显式应用缩小原语转换(例如
double
->
float
)。当你写
float时f=5.67您希望转换隐式发生,因此您会得到错误。Java将所有浮点文本定义为
double
类型,而不管有效位数是多少。指定
float
文本的唯一方法是在数字后面加上
f
f

如前所述,5.67f是float文本的语法,而5.67是双文本

将浮点值赋给双变量需要显式转换(否则会出现“可能会丢失精度”的编译时错误),因此必须编写以下任一代码:

float f = 5.67f;
或:

从文章

浮点文字

如果浮点文字以字母F或F结尾,则它的类型为float;否则它的类型是double,并且可以选择以字母D或D结尾

The floating point types (float and double) can also be expressed using E or e
(for scientific    notation), F or f (32-bit float literal) and D or d (64-bit double literal; 
this is the default and by convention is omitted).

double d1 = 123.4;
// same value as d1, but in scientific notation
double d2 = 1.234e2;
float f1  = 123.4f;
浮动和双精度之间的区别:

浮点:浮点数据类型是单精度32位IEEE 754浮点。它的值范围超出了本文讨论的范围,但在Java语言规范的浮点类型、格式和值部分中有详细说明。与byte和short的建议一样,如果需要在大型浮点数数组中保存内存,请使用浮点(而不是双精度)。此数据类型不应用于精确值,如货币。为此,您将需要使用java.math.BigDecimal类。数字和字符串包括BigDecimal和Java平台提供的其他有用类


double:double数据类型是双精度64位IEEE 754浮点。它的值范围超出了本文讨论的范围,但在Java语言规范的浮点类型、格式和值部分中有详细说明。对于十进制值,此数据类型通常是默认选择。如上所述,此数据类型不应用于精确值,如货币。`

5.67
是双精度(Java类型
double

5.67f
为单精度(Java类型
float

So
float f=5.67首先创建双精度值,然后尝试将其存储在单个精度变量中

当您试图在单个精度变量中存储双精度值时,编译器会拒绝,因为您(可能而且通常)正在丢失信息

您可以使用类型转换,当值不是文本时,您可以这样做:

float f = (float)5.67;
但在这种情况下,首先将文字设为浮点而不是双精度更简单:

float f = 5.67f;

我看起来OP已经知道了,我想现在更清楚了,是的。删除下一票:)已读
float f = 5.67f;