虽然看起来很奇怪,但我找不到如何干净地将float
转换为int
。
这项技术
int int_value = (int)(float_value + 0.5);
触发
warning: use of old-style cast
在gcc。
那么,将float
转换为int
的现代风格,简单方法是什么? (我当然接受精确度的损失)
答案 0 :(得分:5)
正如乔希在评论中指出的那样,+ 0.5
并不十分可靠。为了提高安全性,您可以将static_cast
与std::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)内容。