プロ仕様のソフトウェアで型変換がどのように行われるかを理解したいですか? 次の変換を検討してください。
- int から double
- double から int
- 二重にする文字列
- double から string
現在、これらのタスクを実行するための API を備えたプロジェクトに Qt を使用しています。だから私は、人々が標準の C++ のみでこれらの変換をどのように実行するかを知りたかっただけです。精度、速度、およびメモリは、それぞれの順序で優先されます。
プロ仕様のソフトウェアで型変換がどのように行われるかを理解したいですか? 次の変換を検討してください。
現在、これらのタスクを実行するための API を備えたプロジェクトに Qt を使用しています。だから私は、人々が標準の C++ のみでこれらの変換をどのように実行するかを知りたかっただけです。精度、速度、およびメモリは、それぞれの順序で優先されます。
int から double の場合は、単純にstatic_cast<double>(int_value);
double から int にすることができますが、ほとんどの場合は static_cast で行いますが、int に丸められる値を特定の制御が必要になる場合があります。このためfloor
に、 、round
、または などの関数を使用できますceil
。
文字列から文字列への文字列と文字列から文字列への文字列には、いくつかのオプションがあります。
snprintf()
- 自分が何をしているのかわからない場合はお勧めしません。精度を制御するのは難しい
stringstream
/ istringstream
- これは精度が高く、制御が容易です
boost::format
- 個人的なお気に入り、ドキュメントをチェック: http://www.boost.org/doc/libs/1_53_0/libs/format/doc/format.html
パフォーマンスに関しては、snprintf は割り当てを必要としないため、特定のケースでは最速になるように選択します。
int から double への変換は C++ での昇格であり、暗黙的に行うことができます。
double から intへの変換も暗黙的に行うことができますが、多くの double は丸め整数値を表さないか、大きすぎて変換できないため、注意して使用する必要があります。ほとんどのコンパイラは精度の損失について警告するため、正しいことをしていると確信している場合は、警告を取り除くためにキャストを明示的に行う必要があります。
string to double、double to string : これらは通常、入出力 (GUI、コンソール、テキストファイルなど) にのみ使用されます。数値は、文字列としてではなく、プログラム内でそのまま処理する必要があります。double->string->double 変換チェーンは可能な限りプログラム内で回避する必要があります。どちらの変換も正確ではなく、丸めやその他のエラーが発生しやすいためです。
最初のものは、多くの場合暗黙的です (プロモーションであるため)。1 つ目と2 つ目は、次の単純な方法で実現できますstatic_cast
。
double x = 0.123;
int y = 123;
std::cout << static_cast<int>(x) << '\n';
std::cout << static_cast<double>(y) << '\n';
3番目のものには次が必要ですstd::istringstream
:
std::string x = "123.456";
double y;
std::istringstream ss(x);
ss >> y;
4 番目には次のものが必要std::stringstream
です。
double x = 123.456;
std::stringstream ss;
ss << x;
ss.str(); // your string