在初始化“float”时,转换为“float”并添加“f”作为后缀,有什么区别?
有什么区别
float f = (float) 99.32 ;
和
float f = 99.32f ;
他们都编译并成功运行。
float f = 99.32f ;
这是一个float
,这意味着一个浮点variables直接赋值为一个float
值。
float f = (float) 99.32 ;
这是一个float
variables,它被分配了一个double
float
值,在赋值之前float
。
差异可能会被优化掉,但是在第一种情况下,您有一个双重字面值,types会被转换为浮点值,而在第二种情况下具有浮点值。
如果没有优化,则会在第二个示例中的代码中获得一个types转换。
但是,有些情况下,结果可能(取决于舍入模式)略有不同。 如果你的数字不能被精确地表示,你将在第一个情况下四舍五入 – 首先,当你将十进制表示法舍入为double时,然后当你把它舍入到一个浮点数时,在第一种情况下,你直接舍入十进制表示浮动。
在第一种情况下,如果没有99.32
被解释为double而不是float。
一个双重字面正被铸造浮动。
在第二种情况下,你有一个后缀f
来确保编译器把99.32
当作float。
在这行float f = (float) 99.32;
字面值99.32
是默认创build的double
types,然后转换为float
。
在行float f = 99.32f ;
由于99.32f
的结尾f
,文字被创build为float
types,不需要types转换。
后者将类似于写double f = 99.32;
因为您将一个double
types直接分配给一个匹配types的variables。
没有后缀的浮点文字默认为double
types。
因此,说明float f = (float) 99.32;
你首先明确地把types为99.32
的double
types转换为float
types,然后把它赋值给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;
而右侧仍然隐含地转换为浮点数。
请注意,大多数现代编译器优化了这些,所以表示浮动通常是风格和偏好的问题。 只要一致。