如何将SQL_NUMERIC_STRUCT转换为double和string?

时间:2012-02-07 14:15:16

标签: sql-server visual-c++ odbc

我从SQL Server数据库中检索数字/十进制/货币列值为SQL_NUMERIC_STRUCT结构。现在我必须将其转换为double以进行内部处理,并将其转换为用于GUI输出的字符串。怎么办呢?

1 个答案:

答案 0 :(得分:1)

这是一个好的开始。它不会转换您想要转换的所有内容,但您可以使用这个想法和算法通过一些简单的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];
}

通过将前者除以后者,您可以轻松地从结果分子和分母中创建一个双精度数。此外,要创建字符串,您始终可以使用sprintf或更多C ++方式,ostringstream的双格式化程序。