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
)
Sofloat f=5.67代码>首先创建双精度值,然后尝试将其存储在单个精度变量中
当您试图在单个精度变量中存储双精度值时,编译器会拒绝,因为您(可能而且通常)正在丢失信息
您可以使用类型转换,当值不是文本时,您可以这样做:
float f = (float)5.67;
但在这种情况下,首先将文字设为浮点而不是双精度更简单:
float f = 5.67f;
我看起来OP已经知道了,我想现在更清楚了,是的。删除下一票:)已读
float f = 5.67f;