C++ 从double到float的截断?
我似乎没有警告,有人能解释为什么吗?提前谢谢你>P值>即时值,或文字,如<代码> 3 < /> >代码> 3.14 < /> >或<代码>“hello”<代码>有C++类型。C++ 从double到float的截断?,c++,floating-point,C++,Floating Point,我似乎没有警告,有人能解释为什么吗?提前谢谢你>P值>即时值,或文字,如 3 < /> >代码> 3.14 < /> >或“hello”有C++类型。3.14的类型为double,大于float,并导致此警告。我所说的“更大”是指,如果转换,它可以保存不适合float的值,在这一点上,语言可能会以意外的方式运行 您可以使用后缀指定所需的类型,3.14F将是浮点型 类似地,对于整数,对于无符号整数有3U,对于长整数和偶数整数的组合有3L。C++11还具有用户定义的后缀。来自标准2.14.4,浮动文
3.14
的类型为double
,大于float
,并导致此警告。我所说的“更大”是指,如果转换,它可以保存不适合float
的值,在这一点上,语言可能会以意外的方式运行
您可以使用后缀指定所需的类型,3.14F
将是浮点型
类似地,对于整数,对于无符号整数有
3U
,对于长整数和偶数整数的组合有3L
。C++11还具有用户定义的后缀。来自标准2.14.4,浮动文本
:
除非由后缀显式指定,否则浮点文本的类型为double。后缀f
和f
指定浮点,后缀l
和l
指定长双精度
然后,除非由后缀显式指定,否则浮点文本总是双精度的。铸造到浮球也可能会起作用(注意适合double大小而不是浮球大小的数字),但当铸造是您唯一的选择时,您应该使用铸造(不是这种情况)。在您的代码中,只需使用后缀(
0.54f
),就可以了。0.54
将被视为双精度类型如果您使用了0.54f
,那么它将是一个浮点型。请不要使用小写字母作为后缀(l
);对于1
,它很容易被误读。改用L
;它的意思是相同的,并且明确地不是l
或1
。因为L
需要大写,我建议其他后缀也使用大写。这取决于字体,但我大体上同意。
#include <iostream>
using namespace std;
int main(void)
{
float haha[2];
float (&ptr)[2] = haha;
ptr[0] = 0.54;
ptr[1] = 0.65;
cout << haha[0] << '\n' << haha[1];
system("pause");
return 0;
}
ptr[0] = (float)0.54;
ptr[1] = (float)0.65;