COleCurrency 類別
封裝 OLE Automation 的 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 複製值。 |
operator +, - | 加入、減去和變更值的符號 COleCurrency 。 |
operator +=, -= | 加入和減去 COleCurrency 這個 COleCurrency 物件的值。 |
算子*/ | 依 COleCurrency 整數值調整值。 |
operator *=, /= | 以整數值調整此值 COleCurrency 。 |
算子 << | 將 COleCurrency 值輸出至 CArchive 或 CDumpContext 。 |
算子 >> | COleCurrency 從CArchive 輸入物件。 |
運算元 CURRENCY | 將 COleCurrency 值轉換成 CURRENCY。 |
operator ==、、<<=等等。 | 比較兩個 COleCurrency 值。 |
公用資料成員
名稱 | 描述 |
---|---|
COleCurrency::m_cur | 包含這個 COleCurrency 對象的基礎 CURRENCY。 |
COleCurrency::m_status | 包含這個 COleCurrency 物件的狀態。 |
備註
COleCurrency
沒有基類。
CURRENCY 會實作為 8 位元組,兩個的補碼整數值會縮放 10,000。 這得出一個定點數字,小數點左邊 15 位數,小數點右邊 4 位數。 CURRENCY 數據類型非常適用於涉及金錢的計算,或對於精確度很重要的任何固定點計算。 這是 OLE 自動化數據類型的其中一個可能類型 VARIANT
。
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
現有的 VARIANT
數據結構(可能是 COleVariant
物件)要轉換成貨幣值(VT_CY),並複製到新的 COleCurrency
物件。
nUnits、nFractionalUnits 指出要複製到新COleCurrency
物件之值的單位和小數部分(以 1/10,000 秒為單位)。
備註
所有這些建構函式都會建立初始化為指定值的新 COleCurrency
物件。 下列每個建構函式的簡短描述。 除非另有說明,否則新 COleCurrency
專案的狀態會設定為有效。
COleCurrency() 建構
COleCurrency
初始化為 0 的物件(零)。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 專案。
範例
下列範例顯示零參數和雙參數建構函式的效果:
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
表示要用於轉換的地區設定識別碼。
傳回值
CString
,其中包含格式化的貨幣值。
備註
它會使用本機語言規格來格式化值(地區設定標識符)。 傳回的值中不包含貨幣符號。 如果這個 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
值的狀態。
備註
傳回值是由 CurrencyStatus
類別內 COleCurrency
定義的列舉型別所定義。
enum CurrencyStatus {
valid = 0,
invalid = 1,
null = 2
};
如需這些狀態值的簡短描述,請參閱下列清單:
COleCurrency::valid
表示這個COleCurrency
物件有效。COleCurrency::invalid
表示這個COleCurrency
物件無效,也就是說,其值可能不正確。COleCurrency::null
表示此COleCurrency
物件為 null,也就是說,此物件未提供任何值。 (這是資料庫意義上的“null”,與C++ 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
這個數據成員的類型是 列舉型 CurrencyStatus
別 ,定義於 COleCurrency
類別內。
enum CurrencyStatus{
valid = 0,
invalid = 1,
null = 2,
};
備註
如需這些狀態值的簡短描述,請參閱下列清單:
COleCurrency::valid
表示這個COleCurrency
物件有效。COleCurrency::invalid
表示這個COleCurrency
物件無效,也就是說,其值可能不正確。COleCurrency::null
表示此COleCurrency
物件為 null,也就是說,此物件未提供任何值。 (這是資料庫意義上的“null”,與C++ NULL 相反。
在下列情況下,物件的狀態 COleCurrency
無效:
如果其值是從 VARIANT 或
COleVariant
無法轉換成貨幣值的值設定的。如果這個物件在算術指派作業期間發生溢位或下溢,例如
+=
或 *=。如果將無效的值指派給這個物件。
如果使用 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 +, -
這些運算子可讓您在彼此之間加入和減去兩 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
傳 CURRENCY
回結構,其值會從這個 COleCurrency
物件複製。
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
表示要用於轉換的地區設定識別碼。
傳回值
如果字串成功轉換成貨幣值,則為非零,否則為 0。
備註
它會使用地區語言規格(地區設定標識符)來表示來源字串中非數值字元的意義。
如需地區設定標識碼值的討論,請參閱 支援多種語言。
如果字串成功轉換成貨幣值,這個 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 關係運算符
比較兩個貨幣值,如果條件為 true,則傳回非零值;否則為 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;
備註
注意
如果操作數的狀態為 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,則會對單位進行適當的調整,如下列範例的第三個範例所示。
請注意,單位和小數部分是由帶正負號的長值所指定。 下列第四個範例顯示參數具有不同符號時會發生什麼情況。
範例
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 參數值是由CurrencyStatus
列舉型別所定義,該型別定義於 COleCurrency
類別內。
enum CurrencyStatus {
valid = 0,
invalid = 1,
null = 2
};
如需這些狀態值的簡短描述,請參閱下列清單:
COleCurrency::valid
表示這個COleCurrency
物件有效。COleCurrency::invalid
表示這個COleCurrency
物件無效,也就是說,其值可能不正確。COleCurrency::null
表示此COleCurrency
物件為 null,也就是說,此物件未提供任何值。 (這是資料庫意義上的“null”,與C++ NULL 相反。
警告
此函式適用於進階程式設計情況。 此函式不會改變這個物件中的數據。 它最常用來將狀態設定為 Null 或無效。 請注意,指派運算子 ( operator =) 和 SetCurrency 會根據來源值將物件的狀態設定為 。