Java 为什么浮点数333.50是双精度的
为什么在这一行中浮点数被视为双精度?我认为float有足够的空间来容纳这个数字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 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