次の方法で共有


COleCurrency クラス

OLE オートメーションで使用される CURRENCY データ型をカプセル化します。

構文

class COleCurrency

メンバー

パブリック コンストラクター

名前 説明
COleCurrency::COleCurrency COleCurrency オブジェクトを構築します。

パブリック メソッド

名前 説明
COleCurrency::Format COleCurrency オブジェクトの書式設定された文字列表現を生成します。
COleCurrency::GetStatus この COleCurrency オブジェクトの状態 (有効性) を取得します。
COleCurrency::P arseCurrency 文字列から CURRENCY 値を読み取り、 COleCurrencyの値を設定します。
COleCurrency::SetCurrency この COleCurrency オブジェクトの値を設定します。
COleCurrency::SetStatus この COleCurrency オブジェクトの状態 (有効性) を設定します。

パブリック演算子

名前 説明
operator = COleCurrency 値をコピーします。
演算子 +、- COleCurrency値の符号を加算、減算、および変更します。
operator +=、-= このCOleCurrency オブジェクトのCOleCurrency値を加算および減算します。
演算子*/ COleCurrency値を整数値でスケーリングします。
operator *=, /= この COleCurrency 値を整数値でスケーリングします。
operator << CArchiveまたはCDumpContextCOleCurrency値を出力します。
operator >> CArchiveからCOleCurrency オブジェクトを入力します。
operator CURRENCY COleCurrency値を CURRENCY に変換します。
operator ==、 <、 <= など。 2 つの COleCurrency 値を比較します。

パブリック データ メンバー

名前 説明
COleCurrency::m_cur この COleCurrency オブジェクトの基になる CURRENCY を格納します。
COleCurrency::m_status この COleCurrency オブジェクトの状態を格納します。

解説

COleCurrency には基底クラスはありません。

CURRENCY は、10,000 でスケーリングされた 8 バイトの 2 の補数整数値として実装されます。 これは、15 桁の整数部と 4 桁の小数部を持つ固定小数点数として表現されます。 CURRENCY データ型は、お金を含む計算や、精度が重要な固定小数点計算に非常に役立ちます。 これは、OLE オートメーションの VARIANT データ型に使用できる型の 1 つです。

COleCurrency また、この固定小数点型の基本的な算術演算も実装します。 固定小数点計算中に発生する丸めエラーを制御するために、サポートされている操作が選択されています。

継承階層

COleCurrency

要件

ヘッダー : afxdisp.h

COleCurrency::COleCurrency

COleCurrency オブジェクトを構築します。

COleCurrency();
COleCurrency(CURRENCY cySrc);
COleCurrency(const COleCurrency& curSrc);
COleCurrency(const VARIANT& varSrc);

COleCurrency(
    long nUnits,
    long nFractionalUnits);

パラメーター

cySrc
新しい COleCurrency オブジェクトにコピーする CURRENCY 値。

curSrc
新しい COleCurrency オブジェクトにコピーされる既存の COleCurrency オブジェクト。

varSrc
通貨値 (VT_CY) に変換され、新しいCOleCurrency オブジェクトにコピーされる既存のVARIANTデータ構造 (場合によってはCOleVariant オブジェクト)。

nUnitsnFractionalUnits 新しい COleCurrency オブジェクトにコピーする値の単位と小数部 (1/10,000 単位) を示します。

解説

これらのコンストラクターはすべて、新しい COleCurrency オブジェクトを作成して指定の値に初期化します。 これらの各コンストラクターの簡単な説明を次に示します。 特に明記されていない限り、新しい COleCurrency 項目の状態は有効に設定されます。

  • COleCurrency() 0 (ゼロ) に初期化された COleCurrency オブジェクトを構築します。

  • COleCurrency(cySrc) CURRENCY 値からCOleCurrency オブジェクトを構築します。

  • COleCurrency(curSrc) 既存のCOleCurrency オブジェクトからCOleCurrency オブジェクトを構築します。 新しいオブジェクトの状態は、ソース オブジェクトと同じです。

  • COleCurrency(varSrc) COleCurrency オブジェクトを構築します。 VARIANT構造体またはCOleVariantオブジェクトを通貨 (VT_CY) 値に変換しようとします。 この変換が成功した場合、変換後の値を新しい COleCurrency オブジェクトにコピーします。 そうでない場合、 COleCurrency オブジェクトの値は 0 に設定され、その状態は無効になります。

  • COleCurrency(nUnits, nFractionalUnits) 指定した数値成分から COleCurrency オブジェクトを構築します。 小数部の絶対値が 10,000 を超える場合は、単位に対して適切な調整が行われます。 単位と小数部は、符号付きの長い値で指定されることに注意してください。

詳細については、Windows SDK の CURRENCY および VARIANT エントリを参照してください。

次の例は、0 パラメーターコンストラクターと 2 パラメーター コンストラクターの効果を示しています。

COleCurrency curZero;         // value: 0.0000
COleCurrency curA(4, 500);    // value: 4.0500
COleCurrency curB(2, 11000);  // value: 3.1000
COleCurrency curC(2, -50);    // value: 1.9950

COleCurrency::Format

このメンバー関数を呼び出して、通貨値の書式設定された表現を作成します。

CString Format(DWORD  dwFlags = 0, LCID  lcid = LANG_USER_DEFAULT) const;

パラメーター

dwFlags
ロケール設定のフラグを示します。 通貨に関連するのは、次のフラグのみです。

  • LOCALE_NOUSEROVERRIDE - ユーザーのカスタム設定ではなく、システムの既定のロケール設定を使用します。

lcid
変換に使用するロケール ID を示します。

戻り値

書式設定された通貨値を含む CString

解説

ローカル言語仕様 (ロケール ID) を使用して値を書式設定します。 通貨記号は、返される値には含まれません。 この COleCurrency オブジェクトの状態が null の場合、戻り値は空の文字列になります。 状態が無効な場合、戻り値の文字列は文字列リソース IDS_INVALID_CURRENCYによって指定されます。

COleCurrency curA;           // value: 0.0000
curA.SetCurrency(4, 500);    // value: 4.0500

// value returned: 4.05
curA.Format(0, MAKELCID(MAKELANGID(LANG_CHINESE,
   SUBLANG_CHINESE_SINGAPORE), SORT_DEFAULT));
// value returned: 4,05
curA.Format(0, MAKELCID(MAKELANGID(LANG_GERMAN,
   SUBLANG_GERMAN_AUSTRIAN), SORT_DEFAULT));

COleCurrency::GetStatus

このメンバー関数を呼び出して、特定の COleCurrency オブジェクトの状態 (有効性) を取得します。

CurrencyStatus GetStatus() const;

戻り値

この COleCurrency 値の状態を返します。

解説

戻り値は、COleCurrency クラス内で定義されているCurrencyStatus列挙型によって定義されます。

enum CurrencyStatus {
    valid = 0,
    invalid = 1,
    null = 2
    };

これらの状態値の簡単な説明については、次の一覧を参照してください。

  • COleCurrency::valid この COleCurrency オブジェクトが有効であることを示します。

  • COleCurrency::invalid この COleCurrency オブジェクトが無効であること、つまりその値が正しくない可能性があることを示します。

  • COleCurrency::null この COleCurrency オブジェクトが null であること、つまりこのオブジェクトに値が指定されていないことを示します。 (これは、C++ の NULL ではなく、データベースで "値がない" ことを意味する "null" です。)

COleCurrency オブジェクトの状態は、次の場合に無効になります。

  • その値が VARIANT または通貨値に変換できなかった COleVariant 値から設定されている場合。

  • 算術代入操作中にこのオブジェクトでオーバーフローまたはアンダーフローが発生した場合 ( +=*=など)。

  • このオブジェクトに無効な値が割り当てられた場合。

  • このオブジェクトの状態が、SetStatus を使用して明示的に無効に設定された場合。

状態を無効に設定する可能性がある操作の詳細については、次のメンバー関数を参照してください。

// even an empty COleCurrency is valid
COleCurrency cy;
ASSERT(cy.GetStatus() == COleCurrency::valid);

// always valid after being set
cy.SetCurrency(4, 500);
ASSERT(cy.GetStatus() == COleCurrency::valid);

// some conversions aren't possible and will
// cause an invalid state, like this:
CByteArray array;
COleVariant varBogus(array);
cy = varBogus;
ASSERT(cy.GetStatus() == COleCurrency::invalid);

COleCurrency::m_cur

このCOleCurrency オブジェクトの基になる CURRENCY 構造体。

解説

注意事項

この関数から返されるポインターからアクセスされる CURRENCY 構造体の値を変更すると、この COleCurrency オブジェクトの値が変更されます。 この COleCurrency オブジェクトの状態は変更されません。

詳細については、Windows SDK の CURRENCY エントリを参照してください。

COleCurrency::m_status

このデータ メンバーの型は、COleCurrency クラス内で定義されている列挙型 CurrencyStatus です。

enum CurrencyStatus{
    valid = 0,
    invalid = 1,
    null = 2,
};

解説

これらの状態値の簡単な説明については、次の一覧を参照してください。

  • COleCurrency::valid この COleCurrency オブジェクトが有効であることを示します。

  • COleCurrency::invalid この COleCurrency オブジェクトが無効であること、つまりその値が正しくない可能性があることを示します。

  • COleCurrency::null この COleCurrency オブジェクトが null であること、つまりこのオブジェクトに値が指定されていないことを示します。 (これは、C++ の NULL ではなく、データベースで "値がない" ことを意味する "null" です。)

COleCurrency オブジェクトの状態は、次の場合に無効になります。

  • その値が VARIANT または通貨値に変換できなかった COleVariant 値から設定されている場合。

  • 算術代入操作中にこのオブジェクトでオーバーフローまたはアンダーフローが発生した場合 ( +=*=など)。

  • このオブジェクトに無効な値が割り当てられた場合。

  • このオブジェクトの状態が、SetStatus を使用して明示的に無効に設定された場合。

状態を無効に設定する可能性がある操作の詳細については、次のメンバー関数を参照してください。

注意事項

このデータ メンバーは、高度なプログラミング状況のためのものです。 インライン メンバー関数 GetStatusSetStatus を使用する必要があります。 このデータ メンバーの明示的な設定に関する他の注意点については、SetStatus を参照してください。

COleCurrency::operator =

これらのオーバーロードされた代入演算子は、ソース通貨値をこの COleCurrency オブジェクトにコピーします。

const COleCurrency& operator=(CURRENCY cySrc);
const COleCurrency& operator=(const COleCurrency& curSrc);
const COleCurrency& operator=(const VARIANT& varSrc);

解説

各演算子の簡単な説明を次に示します。

  • operator =( cySrc ) CURRENCY 値が COleCurrency オブジェクトにコピーされ、その状態が有効に設定されます。

  • operator =( curSrc ) オペランドの値と状態は、既存の COleCurrency オブジェクトがこの COleCurrency オブジェクトにコピーされます。

  • operator =( varSrc ) VARIANT 値 (または COleVariant オブジェクト) から通貨 ( VT_CY) への変換が成功した場合、変換後の値がこの COleCurrency オブジェクトにコピーされ、その状態が有効に設定されます。 変換が成功しなかった場合、 COleCurrency オブジェクトの値は 0 に設定され、その状態は無効になります。

詳細については、Windows SDK の CURRENCY および VARIANT エントリを参照してください。

// set to 35.0050
COleCurrency cur1(35, 50);
COleCurrency cur2;

// operator= copies COleCurrency types
cur2 = cur1;
ASSERT(cur1 == cur2);

// can be used to assign a CURRENCY type, as well
CURRENCY cy;
cy.Hi = 0;
cy.Lo = 350050;
cy.int64 = 350050;

// perform assignment
COleCurrency cur3;
cur3 = cy;
ASSERT(cur3 == cur1);

COleCurrency::operator +, -

これらの演算子を使用すると、2 つの COleCurrency 値を相互に加算および減算したり、 COleCurrency 値の符号を変更したりできます。

COleCurrency operator+(const COleCurrency& cur) const;
COleCurrency operator-(const COleCurrency& cur) const;
COleCurrency operator-() const;

解説

いずれかのオペランドが null の場合、結果の COleCurrency 値の状態は null になります。

算術演算がオーバーフローした場合、結果の COleCurrency 値は無効です。

オペランドが無効で、もう一方が null でない場合、結果の COleCurrency 値の状態は無効です。

有効、無効、および null の状態値の詳細については、m_status メンバー変数を参照してください。

// 35.0050
COleCurrency cur1(35, 50);
// 2.0075
COleCurrency cur2(2, 75);
COleCurrency cur3;

// sum is 37.0125
cur3 = cur1 + cur2;
ASSERT(cur3 == COleCurrency(37, 125));

// difference is 32.9975
cur3 = cur1 - cur2;
ASSERT(cur3 == COleCurrency(32, 9975));

COleCurrency::operator +=, -=

このCOleCurrency オブジェクトとの間で、COleCurrency値を加算および減算できます。

const COleCurrency& operator+=(const COleCurrency& cur);
const COleCurrency& operator-=(const COleCurrency& cur);

解説

いずれかのオペランドが null の場合、この COleCurrency オブジェクトの状態は null に設定されます。

算術演算がオーバーフローした場合、この COleCurrency オブジェクトの状態は無効に設定されます。

いずれかのオペランドが無効で、もう一方が null でない場合、この COleCurrency オブジェクトの状態は無効に設定されます。

有効、無効、および null の状態値の詳細については、m_status メンバー変数を参照してください。

// both set to 35.0050
COleCurrency cur1(35, 50);
COleCurrency cur2(35, 50);

// adding 2.0075 results in 37.0125
cur1 += COleCurrency(2, 75);
ASSERT(cur1 == COleCurrency(37, 125));

// subtracting 2.0075 results in 32.9975
cur2 -= COleCurrency(2, 75);
ASSERT(cur2 == COleCurrency(32, 9975));

COleCurrency::operator * および /

COleCurrency値を整数値でスケーリングできます。

COleCurrency operator*(long nOperand) const;
COleCurrency operator/(long nOperand) const;

解説

COleCurrency オペランドが null の場合、結果のCOleCurrency値の状態は null になります。

算術演算がオーバーフローまたはアンダーフローの場合、結果の COleCurrency 値の状態は無効です。

COleCurrency オペランドが無効な場合、結果のCOleCurrency値の状態は無効です。

有効、無効、および null の状態値の詳細については、m_status メンバー変数を参照してください。

// 35 units and 50/10000, or 35.0050
COleCurrency cur1(35, 50);
COleCurrency cur2;

// divided by two is 17.5025
cur2 = cur1 / 2;
ASSERT(cur2 == COleCurrency(17, 5025));

// multiplied by two is 70.0100
cur2 = cur1 * 2;
ASSERT(cur2 == COleCurrency(70, 100));

COleCurrency::operator *=, /=

この COleCurrency 値を整数値でスケーリングできます。

const COleCurrency& operator*=(long nOperand);
const COleCurrency& operator/=(long nOperand);

解説

COleCurrency オペランドが null の場合、このCOleCurrency オブジェクトの状態は null に設定されます。

算術演算がオーバーフローした場合、この COleCurrency オブジェクトの状態は無効に設定されます。

COleCurrency オペランドが無効な場合、このCOleCurrency オブジェクトの状態は無効に設定されます。

有効、無効、および null の状態値の詳細については、m_status メンバー変数を参照してください。

// both set to 35.0050
COleCurrency cur1(35, 50);
COleCurrency cur2(35, 50);

// divide in half
cur1 /= 2;
ASSERT(cur1 == COleCurrency(17, 5025));

// multiply by two
cur2 *= 2;
ASSERT(cur2 == COleCurrency(70, 100));

operator <<, operator >>

診断ダンプとアーカイブへの格納をサポートします。

friend CDumpContext& operator<<(
    CDumpContext& dc,
    COleCurrency curSrc);

friend CArchive& operator<<(
    CArchive& ar,
    COleCurrency curSrc);

friend CArchive& operator>>(
    CArchive& ar,
    COleCurrency& curSrc);

解説

抽出 ( >>) 演算子は、アーカイブからの読み込みをサポートします。

COleCurrency::operator CURRENCY

このCOleCurrency オブジェクトから値がコピーされるCURRENCY構造体を返します。

operator CURRENCY() const;

解説

COleCurrency::P arseCurrency

このメンバー関数を呼び出して文字列を解析し、通貨値を読み取ります。

BOOL ParseCurrency(
    LPCTSTR lpszCurrency,
    DWORD dwFlags = 0,
    LCID lcid = LANG_USER_DEFAULT);

throw(CMemoryException*);
throw(COleException*);

パラメーター

lpszCurrency
解析対象の null で終わる文字列へのポインター。

dwFlags
ロケール設定のフラグ (場合によっては次のフラグ) を示します。

  • LOCALE_NOUSEROVERRIDE - ユーザーのカスタム設定ではなく、システムの既定のロケール設定を使用します。

lcid
変換に使用するロケール ID を示します。

戻り値

文字列が通貨値に正常に変換された場合は 0 以外、それ以外の場合は 0。

解説

ソース文字列内の数値以外の文字の意味には、ローカル言語仕様 (ロケール ID) が使用されます。

ロケール ID 値の詳細については、「 複数言語のサポートを参照してください。

文字列が通貨値に正常に変換された場合、この COleCurrency オブジェクトの値はその値に設定され、その状態は有効に設定されます。

文字列を通貨値に変換できなかった場合、または数値オーバーフローが発生した場合、この COleCurrency オブジェクトの状態は無効です。

メモリ割り当てエラーが原因で文字列変換が失敗した場合、この関数は CMemoryException をスローします。 その他のエラー状態では、この関数は COleException をスローします。

// works if default locale has dot decimal point
COleCurrency cur;
cur.ParseCurrency(_T("$135.95"), 0);
ASSERT(cur == COleCurrency(135, 9500));

COleCurrency 関係演算子

2 つの通貨値を比較し、条件が true の場合は 0 以外の値を返します。それ以外の場合は 0。

BOOL operator==(const COleCurrency& cur) const;
BOOL operator!=(const COleCurrency& cur) const;
BOOL operator<(const COleCurrency& cur) const;
BOOL operator>(const COleCurrency& cur) const;
BOOL operator<=(const COleCurrency& cur) const;
BOOL operator>=(const COleCurrency& cur) const;

解説

Note

いずれかのオペランドの状態が null または無効の場合、順序付け操作 ( <<=>>=) の戻り値は未定義です。 等値演算子 ( ==!=) は、オペランドの状態を考慮します。

COleCurrency curOne(3, 5000);             // 3.5
COleCurrency curTwo(curOne);              // 3.5
BOOL b = (curOne == curTwo);              // TRUE

b = curOne < curTwo;                      // FALSE, same value
b = curOne > curTwo;                      // FALSE, same value
b = curOne <= curTwo;                     // TRUE, same value
b = curOne >= curTwo;                     // TRUE, same value
curTwo.SetStatus(COleCurrency::invalid);
b = curOne == curTwo;                     // FALSE, different status
b = curOne != curTwo;                     // TRUE, different status

COleCurrency::SetCurrency

このメンバー関数を呼び出して、この COleCurrency オブジェクトの単位と小数部を設定します。

void SetCurrency(
    long nUnits,
    long nFractionalUnits);

パラメーター

nUnitsnFractionalUnits この COleCurrency オブジェクトにコピーする値の単位と小数部 (1/10,000 単位) を示します。

解説

小数部の絶対値が 10,000 より大きい場合、次の例の 3 番目に示すように、単位に対して適切な調整が行われます。

単位と小数部は、符号付きの長い値で指定されることに注意してください。 次の例の 4 番目は、パラメーターに異なる符号がある場合の動作を示しています。

COleCurrency curA;           // value: 0.0000
curA.SetCurrency(4, 500);    // value: 4.0500
curA.SetCurrency(2, 11000);  // value: 3.1000
curA.SetCurrency(2, -50);    // value: 1.9950

COleCurrency::SetStatus

このメンバー関数を呼び出して、この COleCurrency オブジェクトの状態 (有効性) を設定します。

void SetStatus(CurrencyStatus  status  );

パラメーター

status
この COleCurrency オブジェクトの新しい状態。

解説

status パラメーターの値は、COleCurrency クラス内で定義されている CurrencyStatus 列挙型によって定義されています。

enum CurrencyStatus {
    valid = 0,
    invalid = 1,
    null = 2
    };

これらの状態値の簡単な説明については、次の一覧を参照してください。

  • COleCurrency::valid この COleCurrency オブジェクトが有効であることを示します。

  • COleCurrency::invalid この COleCurrency オブジェクトが無効であること、つまりその値が正しくない可能性があることを示します。

  • COleCurrency::null この COleCurrency オブジェクトが null であること、つまりこのオブジェクトに値が指定されていないことを示します。 (これは、C++ の NULL ではなく、データベースで "値がない" ことを意味する "null" です。)

注意事項

この関数は、高度なプログラミング状況のためのものです。 この関数では、このオブジェクト内のデータは変更されません。 通常は、状態を null または invalid に設定するために使用されます。 代入演算子 ( operator =) と SetCurrency は、ソース値に基づいてオブジェクトの状態を設定します。

関連項目

階層図
COleVariant クラス