Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将SQL_NUMERIC_STRUCT转换为double和string?_Sql Server_Visual C++_Odbc - Fatal编程技术网

Sql server 如何将SQL_NUMERIC_STRUCT转换为double和string?

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,

我从SQL Server数据库中以SQL\u numeric\u STRUCT结构检索数字/十进制/货币列值。现在我必须将其转换为double进行内部处理,并将其转换为string进行GUI输出。如何做到这一点?

这是一个良好的开端。它不会转换您想要转换的所有内容,但您可以使用想法和算法对一些简单的MOD进行任意转换:

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
,如下所述:。无论如何,您的解决方案似乎符合我的要求,因此我将此标记为答案。