2012-02-07 18 views

答えて

1

ここは良いスタートです。それはあなたが変換したいすべてのものを変換しませんが、あなたはいくつかの簡単な改造で任意の変換を行うためのアイデアやアルゴリズムを使用することができます。

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というダブルフォーマッタを使用することができます。

+0

Fraction :: NumeratorTypeとFraction :: DenominatorTypeとは何ですか? –

+0

あなたはそれらを__int64 ...(またはWindowsの用語ではLONG​​LONG)にすることができます –

+0

'double '型を使うと良いでしょう。しかし、私は 'SQL_NUMERIC_STRUCT'構造体をまったく使用しないようにしました。数値/ decimal/moneyカラムを文字列として読み込み、' SQL_C_NUMERIC'の代わりに 'SQL_C_NUMERIC'の代わりに' SQL_C_WCHAR'を指定しました。 ://stackoverflow.com/questions/9178900/how-to-read-numeric-decimal-money-columns-from-sql-server。とにかく、あなたのソリューションは私が尋ねたもののために働いているようだ、私は答えとしてこれをマークしています。 –

関連する問題