はじめまして。
double dVal = 5.0;
CString strTemp;
strTemp.Format(_T(%.f), dVal);
上記を行った場合、strTempは「5.00000000」となるのですが、
コレを「5」のように、右側のゼロを表示しないようにするには
どうしたらよいのでしょうか。
右から順に一文字ずつ消せばいいんじゃないすか?
やはり、右からみて、「0」か「.」だったら消していくという方法に
なるのですか。
一応、上記はやっているのですが、もっと手軽な方法があればと思い、
質問して見ました。
マニュアルは一応見てから質問させていただきました。
が、ご指摘を受けたという事は、理解不足で、実はそういったことが
できると書いているのでしょうか。。。
もう一度みてみます。
マニュアルを読み直し、
strTemp.Format(_T(%.f), dVal);
ではなく、
strTemp.Format(_T(%.g), dVal);
を使うと良さそうだという事がわかりました。
が、自信がもてないので、今回のような場合には「(%.g)」を使う
という認識に間違いがないか、どなたかご指摘いただけると嬉しいです。
よろしくお願いします。
追試したんですけど、ひろさんとは結果が異なります。
/* Visual Studio 2005(=VC++8)
* cl -EHsc -MD -D_AFXDLL formatTest.cpp
*/
#include <afx.h>
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double dVal = 5.0;
CString strTemp;
const char* format[] = { [%.f], [%.0f], [%2.2f], [%3.5f], [%5.3f],
0 };
for ( int i = 0; format[i] != 0; ++i ) {
strTemp.Format(format[i],dVal);
cout << setw(10) << format[i] << static_cast<const char*>(strTemp) << endl;
}
}
--- 実行結果 ---
[%.f][5]
[%.0f][5]
[%2.2f][5.00]
[%3.5f][5.00000]
[%5.3f][5.000]
> 今回のような場合には「(%.g)」を使うという認識に間違いがないか
なぜやってみないんだろう。ほんの数行コード書くだけやん。
#include <afx.h>
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double dVal = 5.0;
CString strTemp;
const char* format[] = {
[%.e], [%.0e], [%2.2e], [%3.5e], [%5.3e],
[%.f], [%.0f], [%2.2f], [%3.5f], [%5.3f],
[%.g], [%.0g], [%2.2g], [%3.5g], [%5.3g],
0 };
for ( int i = 0; format[i] != 0; ++i ) {
strTemp.Format(format[i],dVal);
cout << setw(10) << format[i] << static_cast<const char*>(strTemp) << endl;
}
}
επιστημη さん
追試、ありがとう御座居ます。
そして、大変恐縮ですが、私の記入にミスがありました。
「strTemp.Format(_T(%.f), dVal);」
ではなく、
「strTemp.Format(_T(%f), dVal);」 (%とfの間に.はない)
を行っています。
変更も下記にしています。
「strTemp.Format(_T(%g), dVal);」
CStringクラスのFormat関数で使用する書式文字列の中身は
printfの書式と同じだったと思います。
で、MFCが使える環境なんですからMSDNも使えるのではないかと
思います。いわゆるHELPと言う奴です。
これでprintfを調べて、書式文字列に関してリンクを辿ってみれば、
必要な情報は出てきますので確認してみてください。
もしくは、printfの書式ならC言語の入門書とかにも載っていそうです。
さらに書籍やMSDNで調べた事を実際にコードを書いて試して見ます。
これが大事です。
読んだだけだと理解したつもりになってしまいます。
実際にやって見て動作を確認しつつ、更に調べると言うことを
繰り返して勉強して行くと良いと思います。
PATIOさん、επιστημηさん
ありがとうございます。
ご助言をもとに、勉強していきます。