在初始化“float”时,转换为“float”并添加“f”作为后缀,有什么区别?

有什么区别

float f = (float) 99.32 ; 

 float f = 99.32f ; 

他们都编译并成功运行。

 float f = 99.32f ; 

这是一个float ,这意味着一个浮点variables直接赋值为一个float值。

 float f = (float) 99.32 ; 

这是一个floatvariables,它被分配了一个double float值,在赋值之前float

差异可能会被优化掉,但是在第一种情况下,您有一个双重字面值,types会被转换为浮点值,而在第二种情况下具有浮点值。

如果没有优化,则会在第二个示例中的代码中获得一个types转换。

但是,有些情况下,结果可能(取决于舍入模式)略有不同。 如果你的数字不能被精确地表示,你将在第一个情况下四舍五入 – 首先,当你将十进制表示法舍入为double时,然后当你把它舍入到一个浮点数时,在第一种情况下,你直接舍入十进制表示浮动。

在第一种情况下,如果没有99.32被解释为double而不是float。

一个双重字面正被铸造浮动。

在第二种情况下,你有一个后缀f来确保编译器把99.32当作float。

在这行float f = (float) 99.32; 字面值99.32是默认创build的doubletypes,然后转换为float

在行float f = 99.32f ; 由于99.32f的结尾f ,文字被创build为floattypes,不需要types转换。

后者将类似于写double f = 99.32; 因为您将一个doubletypes直接分配给一个匹配types的variables。

没有后缀的浮点文字默认为doubletypes。

因此,说明float f = (float) 99.32; 你首先明确地把types为99.32doubletypes转换为floattypes,然后把它赋值给variablesf

说明float f = 99.32; 做同样的事情,但在这种情况下, types之间转换是隐式完成的。

如果你想避免隐式转换,你应该使用f后缀来定义你的文字(即float f = 99.32f;

区别在于文字99.32是doubletypes,而文字99.32f是floattypes。

第一个语句将float文本赋值给一个浮点型variables。 没什么特别的。

第二个语句将一个双重字符转换为一个浮点数,并将结果赋值给一个浮点variables。

就标准而言,您可以将一个双重字符赋值给一个浮点型variables,而无需自己明确地转换。 在这种情况下隐式转换发生。 例如:

 float f = 99.32; 

你甚至可以这样做:

 float f = (double) 10.5f; 

而右侧仍然隐含地转换为浮点数。

请注意,大多数现代编译器优化了这些,所以表示浮动通常是风格和偏好的问题。 只要一致。