我想知道C中这两个变量之间的区别是什么:
float price = 3.00;
Run Code Online (Sandbox Code Playgroud)
和
float price = 3.00f;
Run Code Online (Sandbox Code Playgroud)
尾随"f"?
Jam*_*mes 69
3.00被解释为a double,而3.00f编译器则将其视为a float.
该f后缀只是告诉编译器这是一个float和这是一个double.
请参阅MSDN(C++)
Lun*_*din 35
除了已经说过的内容之外,跟踪1.0和1.0f比许多人意识到的更重要.如果您编写如下代码:
float x;
...
float y = x * 2.0;
Run Code Online (Sandbox Code Playgroud)
然后x将被提升为double,因为2.0是double.不允许编译器优化该促销,否则它将违反C标准.计算以双精度进行,然后将结果隐式截断为浮点数.这意味着计算将比您编写2.0f或2时更慢(尽管更准确).
假如你写2,定会是int类型,这将被提升到一个浮动,并且计算将被用"float精度"完成的.一个好的编译器会警告你这个促销.
在此处阅读有关"通常的算术转换"规则的更多信息:
http://msdn.microsoft.com/en-us/library/3t4w2bkb%28v=vs.80%29.aspx
Gri*_*han 12
因为未填充的浮点文字是双精度的,并且舍入意味着即使是小文字在舍入为float和double时也可以采用不同的值.这可以在以下示例中观察到:
float f=0.67;
if(f == 0.67)
printf("yes");
else
printf("no");
Run Code Online (Sandbox Code Playgroud)
这将输出no,因为0.67舍入为浮动时的值与舍入为double时的值不同.另一方面:
float f=0.67;
if(f == 0.67f)
printf("yes");
else
printf("no");
Run Code Online (Sandbox Code Playgroud)
输出yes.
可以使用大写或小写字母指定后缀.
试试这个:
printf(" %u %u\n", sizeof(.67f), sizeof(.67));
Run Code Online (Sandbox Code Playgroud)
检查@ codepade