浮動小数点数の型を保持したままで浮動小数点数を削除したいと思います。C++で浮動小数点数を削除する方法
(すなわち3.14159fは、3.0Fになるはずです)私は、これまで二度タイプをキャストされて何ができるか
。
float f = 3.14159f;
float r = static_cast<float>(static_cast<int>(f));
これは正しい方法ですか?それとも簡単な方法がありますか?
ありがとうございます。
浮動小数点数の型を保持したままで浮動小数点数を削除したいと思います。C++で浮動小数点数を削除する方法
(すなわち3.14159fは、3.0Fになるはずです)私は、これまで二度タイプをキャストされて何ができるか
。
float f = 3.14159f;
float r = static_cast<float>(static_cast<int>(f));
これは正しい方法ですか?それとも簡単な方法がありますか?
ありがとうございます。
「削除残り物」の操作は切り捨てと呼ばれています。あなたはフロートにint型を割り当てることができますし、それはまだフロートだろう
float r = std::trunc(f);
static_cast
@ZackLeeこれは、あなたが 'std :: trunc'があなたのユースケースでは遅すぎることを証明した後、正確さのためにのみ使用する*後*のパフォーマンスについて心配すべきであるインスタンスの1つです。 –
@ ZackLeeコールには単一のインライン化された命令が含まれている可能性があります。 – dasblinkenlight
これは正しい方法ですか?
号
またはいずれかの簡単な方法はありますか?
一つ一つのキャストは十分なものでなければならない:
float r = static_cast<int>(f);
また@Baum MIT Augenが自分commentに言ったように:
「これはしない値のために失敗しました
int
に適合 "
したがって、std::trunc()
を使用すると、正しいエラー処理の問題が解決されます。
ことを行うには正しい方法ですが、あなたはまた、床を使用することができます。
std::cout << std::floor(3.14f); // prints 3
負の値の場合は正しくありません。 –
:C++は、それが(
<cmath>
ヘッダを含む)に行うためにstd::trunc
機能を提供します。 –'f = std :: trunc(f)' – AnT