我从SQL Server数据库中检索数字/十进制/货币列值为SQL_NUMERIC_STRUCT结构。现在我必须将其转换为double以进行内部处理,并将其转换为用于GUI输出的字符串。怎么办呢?
答案 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
的双格式化程序。