为什么浮点数333.50是双倍的

时间:2017-08-07 13:06:41

标签: java floating-point double

为什么在这一行中浮点数被视为double?我以为浮动有足够的空间容纳这个数字。

z

6 个答案:

答案 0 :(得分:3)

333.50可以在float类型中表示,但是双字面。使用333.50F设置浮动文字 规范见Oracle Java documentation about Primitive Data Types,明确了不同的文字:

  

浮点文字

     

如果浮点字面值以floatF字母结尾,则其类型为f;否则其类型为double,并且可以选择以字母Dd结尾。

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

  

整数文字

     

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

答案 1 :(得分:2)

因为Java规范说默认情况下浮点文字是double值。

  

浮点文字

     

浮点字面值的类型为float,如果它以字母F结尾   或f;否则它的类型是double,它可以选择以...结尾   字母Dd

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

 float f = 333.50F;

答案 2 :(得分:1)

333.50double类型的文字。这就是规则 - 它来自于20世纪70年代的C语言。就像0int类型的文字一样。

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

确实333.5可以将完全表示为float,因为它是一个二元理性。

答案 3 :(得分:0)

这是您在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

答案 4 :(得分:0)

默认情况下浮点文字在java中是double,如果你想让值浮动,你可以这样做

float f = 333.5f

答案 5 :(得分:0)

Java默认将任何小数点值视为double。所以你需要特别定义你正在使用哪种类型的原始数据类型。 例如:

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

` 因此,您必须明确定义不使用默认类型时使用的数据类型