如何在现代C++中将float转换为int

Off*_*rmo 4 c++ floating-point casting

奇怪,因为它可能看起来,我无法找到如何干净地转换floatint.

这种技术

int int_value = (int)(float_value + 0.5);
Run Code Online (Sandbox Code Playgroud)

触发一个

warning: use of old-style cast
Run Code Online (Sandbox Code Playgroud)

在gcc.

那么,什么是现代风格,简单的方式转换floatint?(我当然接受精度的损失)

Vic*_*and 5

正如乔希在评论中指出的那样,+ 0.5并不是很可靠.为了获得额外的安全性,您可以将其结合static_cast使用std::round:

int int_value = static_cast<int>(std::round(float_value));
Run Code Online (Sandbox Code Playgroud)

对于铸造部件,请参阅此优秀文章以获得解释.

  • 由于浮点数学问题,"+ 0.5"是一种令人惊讶的不可靠的舍入方式.请参阅http://blog.frama-c.com/index.php?post/2013/05/02/nearbyintf1. (5认同)