Как преобразовать SQL_NUMERIC_STRUCT в двойную и строковую? - PullRequest
3 голосов
/ 07 февраля 2012

Я получаю числовые / десятичные / денежные значения столбца из базы данных SQL Server в виде структур SQL_NUMERIC_STRUCT. Теперь я должен преобразовать его в удвоение для внутренней обработки и в строку для вывода графического интерфейса. Как это можно сделать?

1 Ответ

1 голос
/ 07 февраля 2012

Вот хорошее начало.Он не конвертирует все, что вы хотите конвертировать, но вы можете использовать идею и алгоритм для произвольного преобразования с помощью нескольких простых модов:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...