Java 为什么浮点数333.50是双精度的

Java 为什么浮点数333.50是双精度的,java,floating-point,double,Java,Floating Point,Double,为什么在这一行中浮点数被视为双精度?我认为float有足够的空间来容纳这个数字 float f = (float)333.50; 333.50是类型为double的文本。这只是一条规则——它起源于20世纪70年代的C语言。就像0是int类型的文本一样 等效的floatliteral是333.5f,或者可以使用编译时可计算的常量表达式,如(float)333.50 实际上,333.5可以精确地表示为一个float,因为它是一个二元有理数 所以你可以这样写 i = 1222; 是一个整数文本

为什么在这一行中浮点数被视为双精度?我认为float有足够的空间来容纳这个数字

float f = (float)333.50;

333.50
是类型为
double
的文本。这只是一条规则——它起源于20世纪70年代的C语言。就像
0
int
类型的文本一样

等效的
float
literal是
333.5f
,或者可以使用编译时可计算的常量表达式,如
(float)333.50


实际上,
333.5
可以精确地表示为一个
float
,因为它是一个二元有理数

所以你可以这样写

i = 1222; 
是一个整数文本

同样的道理

j = 3.1415;
是双重文字

当然,您可以显式定义类型:

i = 1222L;    //for long values
j = 3.1415f;  //for float values

因为Java规范说,默认情况下,浮点文本是一个
double

浮点文本

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

不要使用缩小转换(
double
float
),只需在文字声明中使用
F
前缀:

 float f = 333.50F;

333.50
可以用
float
类型表示,但它是一个双文本。使用
333.50F
可以使用浮点文本
请参阅,规范明确了不同的文字:

浮点文本

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

整型文字也有类似的情况,但此处较小的类型(
int
)是默认类型:

整数文本

如果整数文本以字母
L
L
结尾,则其类型为
long
;否则为int类型。建议使用大写字母
L
,因为小写字母
L
很难与数字
1
区分


默认情况下,java中的浮点文本是
double
,如果希望值浮动,可以这样做

float f = 333.5f

默认情况下,Java将任何小数点值视为双精度值。因此,您需要特别定义正在使用的基本数据类型的类型。 例如:

`int i=10;         // default
long l=123456L; 
float f=123.12F;
double d=123.12345; // default
`
因此,您必须明确定义在不使用默认类型时使用的数据类型类型。

333.50
是双文本。浮点文本应该是
333.50f
。基本上,双是默认的。在C和C++中,类型取决于文字的大小,尽管是整数类型。这是一个公平的问题。
`int i=10;         // default
long l=123456L; 
float f=123.12F;
double d=123.12345; // default