为什么浮点数333.50是双

问题描述:

为什么该行的浮点数被视为双?我认为浮动有足够的空间来保存这个数字。为什么浮点数333.50是双

float f = (float)333.50; 
+11

'333.50'是双文字时使用。一个浮点文字将是'333.50f'。基本上,double是默认值。 – khelwood

+0

在C和C++中,*类型*取决于文字的大小,尽管是整数类型。这是一个公平的问题。 – Bathsheba

默认浮点文字是在java中double,如果你想要的值浮动,你可以在默认情况下对待任何小数点值作为双为此

float f = 333.5f 

333.50是文字double类型。这只是一个规则 - 它来自1970年代的C语言。这就像0int类型的文字。

等价的float文字是333.5f,或者您可以使用编译时可评估的常量表达式,如(float)333.50

事实上333.5可以表示准确作为float因为它是一个二进有理数。

这是你如何在Java(JLS

int a = 12; 
long b = 12L; 
float c = 12.0f; 
double d = 12.0d; 

定义文本所以你可以写那些等;

i = 1222; 

是文字整数

,并以同样的方式

j = 3.1415; 

是双字面

当然

可以显式定义类型:

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

因为... e Java规范说,默认情况下,浮点文字是一个double值。

浮点文本

浮点字面是float类型的,如果它与字母Ff结束;否则其类型是double并且它可以与 字母Dd任选结束。

而不是使用一个收缩转换(doublefloat),只需使用F前缀在字面的声明:

float f = 333.50F; 

333.50可以在float类型来表示的值,但是一个双字面值。使用333.50F有一个浮点数字
该规范,参见Oracle Java documentation about Primitive Data Types,明确不同的文字:

浮点文本

浮点字面是float类型的,如果它与字母Ff结束;否则其类型为double,并且可以选择以字母Dd结尾。

没有为整数文字但这里较小的类型(int)一个类似的情况下是默认的:

整数常量

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

的Java。所以您需要特别定义您正在使用哪种类型的原始数据类型。 例如:

`int i=10;   // default 
long l=123456L; 
float f=123.12F; 
double d=123.12345; // default 

` 所以你必须明确地定义什么类型的数据类型不使用默认的类型