缩小从 double 到 float 的转换

Narrowing conversion from double to float

这段代码有一个整洁的错误。

错误指出:Narrowing conversion from 'double' to 'float' 在 xPos() 中显示 x_pos;函数在底部。

谁能解释这是为什么以及如何纠正它?

    //grab the current position
    double x_pos = clownfish->xPos();

    // move the fish 500pixels/sec in the right direction
    // delta time is measured in milliseconds, so divide by 1000 and multiply
    x_pos += 500 * (game_time.delta.count() / 1000.f);

    // update the position of the clown fish
    clownfish->xPos(x_pos);

警告消息说明了问题所在:“"Narrowing conversion from 'double' to 'float'"。cpp core guidelines 解释了为什么这可能是一个问题。

据推测,clownfish->xPos 函数采用浮点参数。将函数更改为取双精度以避免丢失精度。或者对 x_pos 使用 float,这样就不会丢失精度。更一般地说,不要随便混合使用 float 和 double。

Can someone explain why that is and how to correct it?

缩小:Float 小于 double,类似于 int8_t 小于 int16_t。最大的 float 比最大的 double 小很多。

另请注意:较小的整数会自动神奇地提升为较大的整数。同样,您的编译器也没有抗议 "double x_pos = clownfish->xPos();",double 总是大到足以包含 float。


纠正方法:

如果您确信 float(较小的)足以满足您的需求,或者您不允许更改小丑鱼代码,那么您可以考虑使用强制转换。

clownfish->xPos(static_cast<float>(x_pos)).

如果您愿意并且不禁止更改小丑鱼代码,请确保小丑鱼的 x 位置(即什么 "clownfish->xPos()" returns)是双精度数,并且函数 "clownfish->xPos()" returns一个双。