Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;警告:在一个声明中初始化从double到float的截断,但在另一个声明中不初始化_C++ - Fatal编程技术网

C++ C++;警告:在一个声明中初始化从double到float的截断,但在另一个声明中不初始化

C++ C++;警告:在一个声明中初始化从double到float的截断,但在另一个声明中不初始化,c++,C++,以下是相关代码: static const float SMALL_BINDING_TARGET_SIDE = 10; static const float SMALL_BINDING_TARGET_HS = 0.25; static const float SMALL_BINDING_TARGET_HL = 2.6; static const float SMALL_BINDING_TARGET_VS =

以下是相关代码:

static const float SMALL_BINDING_TARGET_SIDE =              10;
static const float SMALL_BINDING_TARGET_HS =                0.25;
static const float SMALL_BINDING_TARGET_HL =                2.6;
static const float SMALL_BINDING_TARGET_VS =                1.33;
static const float SMALL_BINDING_TARGET_VL =                3.54;
问题是我的编译器(使用Qt和MVSC 2017)抛出以下警告:

warning: C4305: 'initializing': truncation from 'double' to 'float'
在下面三行中,但在上面两行中没有。此外,我总共有16个与此完全相同的声明(包括上面代码中的5个),只有这三个声明生成了警告


有谁能告诉我这两者的区别以及我能做些什么来解决它吗?

通过添加
f
来指定您的文字是浮动的。因此,一条线将如下所示:

static const float SMALL_BINDING_TARGET_SIDE =              10.f;
如果没有f,则文字将被解释为双精度,并且如果二进制表示比浮点精度长,则可能会被截断


这不会发生,因为上面两个可以用二进制表示,而不使用很多位,因此在不截断的情况下适合于浮点。

前两个文本完全可以用浮点表示。实际上,第一个是整数,第二个是2的幂。当您指定的值导致二进制表示,若不截断某些位,则该值将不适用于浮点。从double到float的转换非常昂贵,在任何其他情况下,您都希望避免这种情况


您可以通过传递浮点文字来抑制警告,例如,
1.33f
将生成最接近您指定值的浮点表示。

前两个是完全可表示的,没有数据loss@Swift-星期五派我试着这么说。不清楚吗?谢谢!这解决了我的问题