3
我從SQL Server數據庫中檢索數字/十進制/金錢列值作爲SQL_NUMERIC_STRUCT結構。現在我必須將它轉換爲內部處理的兩倍,並將其轉換爲GUI輸出的字符串。如何才能做到這一點?如何將SQL_NUMERIC_STRUCT轉換爲double和string?
我從SQL Server數據庫中檢索數字/十進制/金錢列值作爲SQL_NUMERIC_STRUCT結構。現在我必須將它轉換爲內部處理的兩倍,並將其轉換爲GUI輸出的字符串。如何才能做到這一點?如何將SQL_NUMERIC_STRUCT轉換爲double和string?
這是一個好的開始。它不會轉換要轉換的一切,但你可以使用這個想法和算法做任意轉換一些簡單的mods:
DWORD g_Denominators[10]={1,10,100,1000,10000,100000,1000000,10000000,
100000000,1000000000};
void FetchDecimalValue(Fraction::NumeratorType &numerator,
Fraction::DenominatorType &denominator,
const SQL_NUMERIC_STRUCT &src)
{
numerator=0;
denominator=1;
DWORDLONG byteDenominator=1;
for (size_t valIdx=0;valIdx<SQL_MAX_NUMERIC_LEN;++valIdx)
{
numerator+=src.val[valIdx]*byteDenominator;
byteDenominator<<=8UI64;
}
// Is the NUMERIC negative?
if (src.sign==0)
numerator=-numerator;
denominator=g_Denominators[src.scale];
}
您可以輕鬆創建一個雙出所產生的分子和分母的將前者分爲後者。另外,要創建一個字符串,您可以始終使用sprintf
或更多的C++方式,即ostringstream
的雙格式化程序。
什麼是Fraction :: NumeratorType和Fraction :: DenominatorType? – 2012-02-07 14:43:00
你可以讓他們__int64 ...(或Windows中的LONGLONG術語) – 2012-02-07 16:38:15
我認爲使用'double'類型會更好。但是我選擇不使用'SQL_NUMERIC_STRUCT'結構,而是使用'SQLGetData()'讀取數據時讀取數字/十進制/金錢列作爲字符串,指定'SQL_C_WCHAR'而不是'SQL_C_NUMERIC',如下所示:http ://stackoverflow.com/questions/9178900/how-to-read-numeric-decimal-money-columns-from-sql-server。無論如何,你的解決方案似乎在爲我所問的問題工作,所以我將其標記爲答案。 – 2012-02-08 06:31:00