共用方式為


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 值輸出至 CArchiveCDumpContext
運算元 >> COleCurrencyCArchive 輸入 物件。
運算子 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( nUnitsnFractionalUnits ) 從指定的數值元件建構 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 明確將此物件的狀態設定為無效

如需可能將狀態設定為無效之作業的詳細資訊,請參閱下列成員函式:

警告

此資料成員適用于進階程式設計情況。 您應該使用內嵌成員函式 GetStatus SetStatus 。 如需明確設定此資料成員的進一步注意事項,請參閱 SetStatus

COleCurrency::operator =

這些多載指派運算子會將來源貨幣值複製到這個 COleCurrency 物件中。

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

備註

每個運算子的簡短描述如下:

  • operator =( cySrcCURRENCY 會複製到 物件中 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 +, -

這些運算子可讓您在彼此之間加入和減去兩 COleCurrencyCOleCurrency 值,以及變更值的符號。

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 會根據來源值將物件的狀態設定為 。

另請參閱

階層架構圖表
COleVariant 類別