Sql server 如何将SQL_NUMERIC_STRUCT转换为double和string?
我从SQL Server数据库中以SQL\u numeric\u STRUCT结构检索数字/十进制/货币列值。现在我必须将其转换为double进行内部处理,并将其转换为string进行GUI输出。如何做到这一点?这是一个良好的开端。它不会转换您想要转换的所有内容,但您可以使用想法和算法对一些简单的MOD进行任意转换:Sql server 如何将SQL_NUMERIC_STRUCT转换为double和string?,sql-server,visual-c++,odbc,Sql Server,Visual C++,Odbc,我从SQL Server数据库中以SQL\u numeric\u STRUCT结构检索数字/十进制/货币列值。现在我必须将其转换为double进行内部处理,并将其转换为string进行GUI输出。如何做到这一点?这是一个良好的开端。它不会转换您想要转换的所有内容,但您可以使用想法和算法对一些简单的MOD进行任意转换: DWORD g_Denominators[10]={1,10,100,1000,10000,100000,1000000,10000000,
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];
}
DWORD g_分母[10]={1,101001000100001000010000000,
100000000,1000000000};
void FetchDecimalValue(分数::分子类型和分子,
分数::分母类型和分母,
常量SQL(数字结构和src)
{
分子=0;
分母=1;
DWORDLONG byteDenominator=1;
对于(size\u t valIdx=0;valIdx什么是分数::NumeratorType和分数::分母type?您可以将它们设置为u int64…(或Windows术语中的LONGLONG)我认为使用double
类型会更好。但我选择根本不使用SQL\u NUMERIC\u STRUCT
结构,而是将数字/十进制/货币列作为字符串读取,在使用SQLGetData()读取时指定SQL\u WCHAR
而不是SQL\u NUMERIC
,如下所述:。无论如何,您的解决方案似乎符合我的要求,因此我将此标记为答案。