3
数値/ 10進/金額の列値をSQL ServerデータベースからSQL_NUMERIC_STRUCT構造体として取り出します。今私は内部処理とGUI出力の文字列に倍に変換する必要があります。これはどうすればできますか?SQL_NUMERIC_STRUCTをdoubleとstringに変換するにはどうすればよいですか?
数値/ 10進/金額の列値をSQL ServerデータベースからSQL_NUMERIC_STRUCT構造体として取り出します。今私は内部処理とGUI出力の文字列に倍に変換する必要があります。これはどうすればできますか?SQL_NUMERIC_STRUCTをdoubleとstringに変換するにはどうすればよいですか?
ここは良いスタートです。それはあなたが変換したいすべてのものを変換しませんが、あなたはいくつかの簡単な改造で任意の変換を行うためのアイデアやアルゴリズムを使用することができます。
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
というダブルフォーマッタを使用することができます。
Fraction :: NumeratorTypeとFraction :: DenominatorTypeとは何ですか? –
あなたはそれらを__int64 ...(またはWindowsの用語ではLONGLONG)にすることができます –
'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。とにかく、あなたのソリューションは私が尋ねたもののために働いているようだ、私は答えとしてこれをマークしています。 –