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 またはCDumpContext にCOleCurrency 値を出力します。 |
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
オブジェクト)。
nUnits、 nFractionalUnits 新しい 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 を使用して明示的に無効に設定された場合。
状態を無効に設定する可能性がある操作の詳細については、次のメンバー関数を参照してください。
注意事項
このデータ メンバーは、高度なプログラミング状況のためのものです。 インライン メンバー関数 GetStatus と SetStatus を使用する必要があります。 このデータ メンバーの明示的な設定に関する他の注意点については、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);
パラメーター
nUnits、 nFractionalUnits この 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 は、ソース値に基づいてオブジェクトの状態を設定します。