6

As strange as it may seems, I can't find how to cleanly convert a float to an int.

This technique

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

triggers a

warning: use of old-style cast

in gcc.

So, what is the modern-style, simple way to convert a float to an int ? (I accept the loss of precision of course)

4

3 に答える 3

8

ジョシュがコメントで指摘したように、+ 0.5あまり信頼できません。セキュリティを強化するために、次のようにastatic_castを組み合わせることができます。std::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 に答える