6

尽管看起来很奇怪,但我找不到如何干净地将 a 转换floatint.

这种技术

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

触发一个

warning: use of old-style cast

在 gcc 中。

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

4

3 回答 3

8

正如乔希在评论中指出的那样,+ 0.5不是很可靠。为了获得额外的安全性,您可以将 astatic_caststd::round这样的组合:

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

对于铸造部分,请参阅这篇出色的帖子以获得解释。

于 2013-05-15T16:48:37.700 回答
1

尝试:

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

仅供参考: C++ 中的不同类型转换很好地解释了 C++ 中引入的这 4 种类型转换。

于 2013-05-15T16:49:13.297 回答
1

你也可以考虑

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

lexical_cast 具有适用于所有原始类型和 stl 字符串等的好处。这也意味着您不必做 (float_value + 0.5) 的东西。

于 2013-05-15T16:52:27.667 回答