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

时间:2013-05-15 16:47:33

标签: c++ casting floating-point

虽然看起来很奇怪,但我找不到如何干净地将float转换为int

这项技术

int int_value = (int)(float_value + 0.5);

触发

warning: use of old-style cast

在gcc。

那么,将float转换为int的现代风格,简单方法是什么? (我当然接受精确度的损失)

3 个答案:

答案 0 :(得分:5)

正如乔希在评论中指出的那样,+ 0.5并不十分可靠。为了提高安全性,您可以将static_caststd::round合并为:

int int_value = static_cast<int>(std::round(float_value));

对于铸造部件,请参阅this excellent post以获取解释。

答案 1 :(得分:1)

尝试:

int int_value = static_cast<int>(float_value + 0.5);

仅供参考:different casts in C++对C ++中引入的4个演员表进行了很好的解释。

答案 2 :(得分:1)

你也可以考虑

int int_value = boost::lexical_cast<int>(float_value);

lexical_cast具有处理所有原始类型和stl字符串等的好处。这也意味着您不必执行(float_value + 0.5)内容。