2017-07-15 14 views
0

浮動小数点数の型を保持したままで浮動小数点数を削除したいと思います。C++で浮動小数点数を削除する方法

(すなわち3.14159fは、3.0Fになるはずです)私は、これまで二度タイプをキャストされて何ができるか

float f = 3.14159f; 

float r = static_cast<float>(static_cast<int>(f)); 

これは正しい方法ですか?それとも簡単な方法がありますか?

ありがとうございます。

+0

:C++は、それが(<cmath>ヘッダを含む)に行うためにstd::trunc機能を提供します。 –

+1

'f = std :: trunc(f)' – AnT

答えて

7

「削除残り物」の操作は切り捨てと呼ばれています。あなたはフロートにint型を割り当てることができますし、それはまだフロートだろう

float r = std::trunc(f); 
+0

static_cast ()の代わりにtrunc()を使用すると、パフォーマンス上のオーバーヘッドはありますか? –

+7

@ZackLeeこれは、あなたが 'std :: trunc'があなたのユースケースでは遅すぎることを証明した後、正確さのためにのみ使用する*後*のパフォーマンスについて心配すべきであるインスタンスの1つです。 –

+1

@ ZackLeeコールには単一のインライン化された命令が含まれている可能性があります。 – dasblinkenlight

3

これは正しい方法ですか?

またはいずれかの簡単な方法はありますか?

一つ一つのキャストは十分なものでなければならない:

float r = static_cast<int>(f); 

また@Baum MIT Augenが自分commentに言ったように:

「これはしない値のために失敗しましたintに適合 "

したがって、std::trunc()を使用すると、正しいエラー処理の問題が解決されます。

+0

これはコメントでなければなりません! –

+0

@SurajSどのように質問に答えることができないと感じますか?それは私の答えのように見えます。 – hvd

+0

@SurajSなぜそうですか?明確な質問があり、私はそれに答えました。それは、それがオフトピックであることを意味するわけではありません、かなり簡単な質問ですか、いいえ? – user0042

-1

ことを行うには正しい方法ですが、あなたはまた、床を使用することができます。

std::cout << std::floor(3.14f); // prints 3 
+2

負の値の場合は正しくありません。 –

関連する問題