• ベストアンサー

CString を使わないで小数点キャスト

MFCを使っています。 CString strTest; strTest.Format("%5.2f%", 50.12) としているのを、CStringを使わないでfloatから文字列にしたいのですが、 どのようにすればよいでしょう? 簡単な方法は無いでしょうか? 変換後は DrawText で表示するものです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nak777r
  • ベストアンサー率36% (49/136)
回答No.2

MFC のライブラリを使用しないって意味なら c言語の sprintf 関数で行えばいいのでは?

spendtoomuch
質問者

お礼

有難うございます。勘違いしてました!

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

結局、CStringやsprintf等を使うのが「簡単な方法」です。 何が不満なのでしょう?

spendtoomuch
質問者

お礼

CStringの使い過ぎでエラーが起きてる気がして・・・

関連するQ&A

  • キャストについて str = (CString*)("999") ;

    環境 WIN98 VC++6.0 MFC にて いつもお世話になります。 先日質問したばかり(QNo.682705)なのですが、やはり納得できないことがあるのでお願いします。 分かっている人からみれば、おかしな疑問と思われるかも知れませんが、私にとっては素朴に疑問が生じてしまいます。 *************************** 以下2つのコードのうち、<A>は文法的にOKで<B>がNGな理由が知りたいです。 <A> CString* str ; str = (CString*)m_array.GetAt(i) ; //OK <B> CString* str ; str = (CString*)("999") ; //NG <A>は、m_arrayの要素にCString*を入れていて、初めて成り立つ式です。 と教わりましたが、むしろ私にはCString*以外が入っているため、CString*のキャストしていると思える。 CString*が入っているのなら、キャストする必要は無いのではないでしょうか? ネット上で見つけたコードなため、実際の値やm_arrayの宣言がどうなっているかは確認出来ません。 そして、<A>がおかしなコードでは無いという大前提にたつと、<A>は別の表現をすると <A> str = (CString*)(CString*以外のポインタ) ; となります。 そうすると<B>のコードも、"999"は999の文字列が入っているアドレスを指すポインタであるという考えが正しいとすると、 <B> str = (CString*)(999をさすポインタ) ; となり、おかしなコードではないと思えるのですが、考え方のどこがおかしいのでしょうか? ************************** 以下のことを教わった上であえて聞いています。 str = (CString*)("999"); は、リテラル文字列をつっこもうとしています。 リテラル文字列とCStringはまったく別物です。

  • CStringについて

    CStringにおいてFindではエラーが出ないのに、ReverseFindだとエラーがでます。 error C2664: 'ReverseFind' : 1 番目の引数を 'char [4]' から 'char' に変換できません。 (新しい機能 ; ヘルプを参照) この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。 キャストするとエラーは出ませんが文字列の検索は失敗してしまいます。 Findはまったく問題無いのにどうしてこのようなことが起きるのでしょう? どう対処すれば良いか教えてください。 CString ddd; ・ ・ nn=ddd.Find("DOW");     ←エラーなし nn=ddd.ReverseFind("DOW"); ←エラーあり 環境はWIN98 VC++6.0 MFCです。

  • CString 大量連結

    VC++6.0のMFCで開発してます。 プログラム内で CString str; str += ○○ とやって連結し終わった後にstrを使って 処理をする所があって試した所すごく遅く、文字列がかなり 長いと固まってしまいます。調べたらCStringの大量連結は パフォーマンスががた落ちって書いてありました。 何か良い方法はないでしょうか? ※連結は必須です。

  • Windowsアプリケーションのクラッシュ(CStringによる?)

    社内で使用しているアプリケーションを以下の環境で製作しています。  VC Ver6、MFC使用  OS:Windows2000 このとき、一定期間(45~49日)をおくとクラッシュ してしまう現象が発生してしまい、試しにデバッガ上で動作させてみて試したところ、CStringで定義したオブジェクトに”=”で直接、文字列を代入している箇所でブレークポイントがかかっていました。但し、この場所としてはMFCのCFileクラスのOpenの中でした。  そこで以下の項目について何か情報があれば教えていただけないでしょうか。  1.CStringのマイクロソフト自身のヘルプ情報に以下のような”=”を使用した文字列の代入はメモリリークを発生する可能性があります、とありました。これを避けるには例えばFormat等を使用すれば回避できるものでしょうか。  例:CString aaa;    aaa = ”1234”;     これを以下のように変更。    aaa.Format(”1234”); 2.最初に記述しているように、MFC側でも項目1のような使用法を行っているようですが、このMFCはソースがあるので、それを仮に修正して試すようなことは一般的に可能でしょうか。 以上よろしくお願いします。 不明点等あれば御連絡お願いします。

  • 小数点を文字列に

    小数点(floatなど)を文字列に変換するにはどうしたらいいでしょうか? (char*)でするとエラーがでます。 どのようにしたらいいでしょうか? よろしくお願いいたしますm(__)m

  • 小数点入りの文字列をfloat型に変換

    例えば、 32.1 のように4文字の文字列が、あるchar型配列に入っている場合、この値を使って計算したいので、float型などに変換したいのですが、どんな方法がありますか?

  • VC++2005で、CString型に16進文字列を入れたいのですが・・

    VC++2005で、CString型に16進文字列を入れたいのですが・・・ 次のようなエラーが出ます。 void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)' : 1 番目の引数を 'const char [5]' から 'const wchar_t *' に変換できません。 プログラムは次の通りです。 CString strBuff; CString strWork; TCHAR tszBuff[80]; UINT unLength; UINT un1; unLength = 5; strBuff = "12345"; _tcscpy(tszBuff, strBuff); strWork = ""; for(un1 = 0; un1 < unLength; un1++) { strWork = strWork + strBuff.Format("%02x", tszBuff[un1]); ←ここにエラーがあると言われています。 } 結果は、strWorkに、"3132333435"となるようにしたい! ネットで探したら、 >UNICODEを使われているのだと思われます。 >T("")マクロを使ってワイドキャラクタに変換するように指示すれば動くと思います。 とあったので、 strWork = strWork + strBuff.Format(_T("%02x"), tszBuff[un1]); としてみたのですが、 二項演算子 '+' : 型 'void' の右オペランドを扱う演算子が見つかりません (または変換できません)。 というエラーが表示されました。 VC++6.0を半年かじり、今日、初めてVC++2005に触った程度の初心者です。 どなたか助言を頂ければ幸いです。 環境  Windows XP Pro SP3  Visual C++ 2005(MFC) 以上、よろしくお願いします。

  • C++(VC6)で、CString型を配列へ

    C++(VC6)で、CString型の文字列をCString型の配列へセットする方法を教えてもらえませんか? キーワード検索で、AND検索・OR検索を実現する為に、まずはCString型の文字列をCString型の配列にセットしたいです。 例えば、 □阪神□□□野球□赤松□□ と入力されたCString型の文字列を、 keyword[0] = 阪神 keyword[1] = 野球 keyword[2] = 赤松 と、セットしたいのです。 ※文字列中の"□"は全角空白、または半角空白を表しています。 よろしくお願い致します。

  • 文字化けしない書き方

    CString str = "%#.3f" という文字列に関して、数字部分をint valで置き換えたいなと思っています。 そこで、Formatを使って以下のように書きましたが、%#.が文字化けしてしまいます。 str.Format("%s%df", "%#.", val); 1文字ずつなら表示されるようなのですが、%#あるいは#.とやると文字化け(□)になって しまいます。なので、 str.Format("%s%s%s%df", "%", "#", ".", val); とやると、表示されるには表示されるのですが、str.Format("%s%df", ...)という書き方で 書けたらなと思っています。何か方法はないでしょうか。 よろしくお願いいたします。 環境はWindowsXP, VC2005++ &MFC です。

  • C#のキャストについて(32bit浮動小数点)

    こんにちは。 現在、Visual Studio 2005を使用してC#のプログラムを作成しています。 32bitの浮動小数点のデータを表示しようとしているのですがうまくいきません。 具体的な例としては 0x42F6E9E0  → 123.456789 0x4476E9E0  → 987.654321 のように変換した結果を表したいと考えています。 c言語では int main() { int h = 0x42F6E9D5; float f; f = *(float *)(&h); return 0; } のようにすればfで値(123.45678)が取得できたのですが、 これと同じ事をC#ではどのように書くのでしょうか? ポインタを含んだキャストのやり方がわかりません。 以上よろしくお願い致します。