2011-08-01 40 views
0

CURRENCY型をlong型に変換するにはどうすればよいですか?私は%dの私はこの1つで苦労してるCURRENCYをlongに変換する

を使用してはsprintfにCURRENCY型の値を入れたいので

が、私はこれを行うことができるようにする必要があり、ヘルプは高く評価され:)

通貨が文字列の場合、それは他の基本的なデータ型である場合
+2

C++にはCURRENCY型がありません。そのため、どのような構造体であるかについて詳しく知っておく必要があります。 –

+0

CURRENCYクラスの定義を追加できますか?オーバーロードされた演算子を正確に作成する方法、あなたが必要とするものを行うことを可能にするアクセサー。 – Soren

+0

VariantChangeTypeを使用して文字列に変換し、%lsでsprintfします。 –

答えて

0

、あなたが

sscanf(currency, "%d", &myLong); 

を使用することができ、あなただけの型キャストすることができ、このような

long myLong = (long)currency; 
として

データタイプに関する詳細情報がある場合は、投稿に編集してください。

0

CURRENCYは、コードのどこかで定義されたクラスです(つまり、ネイティブのC++タイプではありません)。

あなたのクラスは、他の誰かによって書かれた場合、既にint(またはlong)にキャストする機能を持つかもしれません。あなたは、(1)ヘッダファイルをreadinhまたは(2)この

CURRENCY mymoney; 
    printf("%d",static_cast<long>(mymoney)); 

をcompileingと、コンパイラは、あなたがそれと離れて取得してみましょうかどうかを確認することにより、そのを把握しようとすることができる - と、それがないならば、最も可能性がありますすでにそのクラスに対して定義されているキャスト演算子です。

多くの人々は、あなたがC++コードでsprintfを使用するのが好きではありませんが、ストリームを使用することをお勧めします。その代わりに定義された<<オペレータがあるかもしれない場合 - あなたは(1)読むことによってファイルを含めることを決定しようとすることができ、またはあなたは、コードを記述する必要がありそうでない場合(2)このコード

CURRENCY mymoney; 
    std::cout << mymoney << std:: endl; 

をコンパイルします<<operatorおよび/またはlong型キャスト演算子をCurrencyクラスにオーバーロードして、ストリーム出力および他の型にキャストするために必要な値を返します。

1

CURRENCYの値をlong型にキャストしたいとします。ドキュメントでわかるように、通貨は単なる64ビット整数で、通貨単位の1/10000を格納します。単位とは、ドル、英ポンド、ユーロなどを意味し、ペニー、セントなどではありません。あなたがしなければならないのは、long value = (long)currency.int64です。 int64の値がLONG_MAXより大きい場合またはLONG_MINより小さい場合、切り捨てエラーが発生することに注意してください。

なぜ値をlongに変換する必要がありますか?あなたはCURRENCYユニオンをそのまま使用できませんか?

関連する問題