有什么区别
float f = (float) 99.32 ;
Run Code Online (Sandbox Code Playgroud)
和
float f = 99.32f ;
Run Code Online (Sandbox Code Playgroud)
他们都编译成功并成功运行.
Mag*_*sch 86
float f = 99.32f ;
Run Code Online (Sandbox Code Playgroud)
这是一个float
文字,这意味着浮动变量float
直接赋值.
float f = (float) 99.32 ;
Run Code Online (Sandbox Code Playgroud)
这是一个 float
被分配的变量double
被转换为值float
被分配之前.
sky*_*ing 25
差异可能会被优化掉,但在第一种情况下,你有一个双文字类型,当你在第二种情况下有一个浮点文字时,它被类型化为浮点数.
如果没有优化,您将在第二个示例中的代码中获得类型转换.
然而,有一些极端情况,结果可能(取决于舍入模式)略有不同.如果您的数字无法准确表示,您将在第一种情况下四舍五入 - 首先将十进制表示舍入为double,然后将该四舍五入为浮点数,而在第一种情况下直接舍入十进制表示浮动.
cod*_*edd 11
在该行中,默认情况下float f = (float) 99.32;
将文字99.32
创建为double
类型,然后转换为a float
.
在该行中float f = 99.32f ;
,float
由于尾随而将文字创建为类型f
,99.32f
并且不需要类型转换.
后者类似于写入,double f = 99.32;
因为您将double
类型直接分配给匹配类型的变量.
101*_*010 10
默认情况下,没有后缀的浮点文字是double
类型.
因此,声明float f = (float) 99.32;
您首先将显式文字99.32
的类型转换double
为a float
,然后将其分配给变量f
.
说明float f = 99.32;
做同样的事情,但在这种情况下,类型之间的转换是隐式完成的.
如果你想避免隐式转换,你应该使用f
后缀来定义你的文字(即float f = 99.32f;
)
区别在于文字99.32
是double类型,而文字99.32f
是float类型.
第一个语句将float文本赋给float变量.没什么特别的.
第二个语句将double文字强制转换为float,并将结果赋给float变量.
就标准而言,您可以将double文本分配给float变量,而无需自己显式地转换它.在那种情况下,发生隐式转换.例如:
float f = 99.32;
Run Code Online (Sandbox Code Playgroud)
你甚至可以这样做:
float f = (double) 10.5f;
Run Code Online (Sandbox Code Playgroud)
并且右侧仍然隐式转换为浮动.
请注意,大多数现代编译器都会优化它们,因此表示浮动通常是风格和偏好的问题.只是保持一致.