- ベストアンサー
フロート演算について
ULARGE_INTEGER i64Total; GetDiskFreeSpaceEx(・・・ sprintf( text, "全体容量:%f Gbyte", (float)i64Total.QuadPart/(1024*1024*1024)); 以上のコードではサイン付きの変数でないためエラーになりました。 サイン無しの変数をサイン付きに変換する方法を教えてください。 最終的には、全体容量を小数点以下も表示したいのです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
i64Total.QuadPartはULONGLONGですから、符号付にしたいならLONGLONGにキャストすればいいでしょう。 (double)(LONGLONG)i64Total.QuadPart とすればエラーにならないはずです。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
そちらで #include <stdio.h> #include <windows.h> int main() { ULONGLONG x = 1; double y = (double)x; printf("%f\n", y); return 0; } はコンパイルできますか?
補足
ULONGLONG x = 1; double y = (double)x; printf("%f\n", y); これをコンパイルしたところ やはり 'unsigned__int64'から'double'への変換はインプリメントされていません。'signed__64'を使用します。 のメッセージがでました。 ご指導ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「サイン付きの変数でないためエラーになりました」ってどういうことなんだろう. そんなメッセージが出たのかなぁ....
補足
VC++のコンパイル時の実際のエラーメッセージは以下の通りです。 'unsigned__int64'から'double'への変換はインプリメントされていません。'signed__64'を使用します。 よろしくお願いします。
- kmee
- ベストアンサー率55% (1857/3366)
signed と unsinged のこと? 1024U と整数にUを付けるとunsinged int になります。 それよりは、 この場合なら (float)i64Total.QuadPart/(1024F*1024F*1024F) と1024をfloatにする方がいいような。 また、特に理由が無いのなら、 floatよりはdoubleの方がいいと思います。 その場合は (double)i64Total.QuadPart/(1024.0*1024.0*1024.0)
補足
コンパイル時の実際のエラーメッセージは次のようになっていました。 'unsigned__int64'から'float'への変換はインプリメントされていません。'signed__64'を使用します。 floatの変数は正負の符号付きの変数である必要があるようです。 回答頂いた >1024U と整数にUを付けるとunsinged int になります。 これでは符号付きにはなりません。 >と1024をfloatにする方がいいような。 これも構文エラーのエラーメッセージがでます。 >また、特に理由が無いのなら、 floatよりはdoubleの方がいいと思います。 この場合も 'unsigned__int64'から'double'への変換はインプリメントされていません。'signed__64'を使用します。 のエラーメッセージがでます。 結果として アンサインのi64Total.QuadPart自体を64ビットのサイン付き変数に変換する以外に方法はないように思います。 よろしくお願いします。
お礼
m-take0220さん 簡単にできました。 助かりました、ありがとうございました。