在 ODBC 应用程序中使用十进制浮点数据的示例

DECFLOAT(16)和DECFLOAT(34) SQL数据类型分别映射到 SQLDECIMAL64 和 SQLDECIMAL128 C类型。 在将数据分配给 DECFLOAT 列之前,必须将十进制浮点值的字符数据转换为十进制浮点类型。 您可以将DECFLOAT列中检索到的数据转换为其他数据类型,以便在应用程序中进行操作。

以下代码演示了如何将十进制浮点数据分配给DECFLOAT列。 例子:
  • 将表示十进制浮点值的字符串常量分配给字符变量。
  • 将字符变量转换为 SQLDECIMAL64 和 SQLDECIMAL128 格式,并将结果分配给 SQLDECIMAL64 和 SQLDECIMAL128 变量。
  • 将 SQLDECIMAL64 变量绑定到DECFLOAT(16)参数标记,将 SQLDECIMAL128 变量绑定到DECFLOAT(34)参数标记。
/* Declare variables for decimal floating point data */
SQLDECIMAL64	 H1DFP16;
SQLDECIMAL128 H1DFP34;

SQLINTEGER		LEN_H1DFP16;
SQLINTEGER   LEN_H1DFP34;

SQLCHAR      H1CHAR[100];
decContext_t l_decCtxt64; 
decContext_t l_decCtxt128;

/* Initialize a decContext structure to default values */
decContextDefault(&l_decCtxt64, DEC_INIT_DECIMAL64);  
decContextDefault(&l_decCtxt128, DEC_INIT_DECIMAL128);

/* Convert a character string to decimal64 format for insert */
strcpy( (char *)H1CHAR, "6400E-2" );        
decimal64FromString((decimal64_t *)&H1DFP16,
                    (char *)H1CHAR,         
                    &l_decCtxt64);          
LEN_H1DFP16 = sizeof(H1DFP16);     

/* Convert a character string to decimal128 format for insert */
strcpy( (char *)H1CHAR, "1.28E2" );           
decimal128FromString((decimal128_t *)&H1DFP34,
                     (char *)H1CHAR,          
                     &l_decCtxt128);          
LEN_H1DFP34 = sizeof(H1DFP34);                         

/* Bind to DECFLOAT(16)*/
SQLParameter( hstmt,
		  1,
		  SQL_PARAM_INPUT,
		  SQL_C_DECIMAL64,
	        SQL_DECFLOAT,
              16,
              0,
		  (SQLPOINTER)&H1DFP16,
		  sizeof(H1DFP16),
		  (SQLINTEGER *)&LEN_H1DFP16);

/* Bind to DECFLOAT(34)*/
SQLParameter( hstmt,
		  1,
		  SQL_PARAM_INPUT,
		  SQL_C_DECIMAL128,
	        SQL_DECFLOAT,
              34,
              0,
		  (SQLPOINTER)&H1DFP34,
		  sizeof(H1DFP34),
		  (SQLINTEGER *)&LEN_H1DFP34);
以下代码演示了如何从 DECFLOAT 列中检索十进制浮点数据。 例子:
  • 将 DECFLOAT(16) 列绑定到 SQLDECIMAL64 变量,将 DECFLOAT(34) 列绑定到 SQLDECIMAL128 变量。
  • 将数据从DECFLOAT列中提取到 SQLDECIMAL64 和 SQLDECIMAL128 变量中。
  • 将 SQLDECIMAL64 和 SQLDECIMAL128 变量转换为字符格式,并将结果赋值给字符变量。
/* Declare variables for decimal floating point data */
SQLDECIMAL64	 H1DFP16;
SQLDECIMAL128 H1DFP34;

SQLINTEGER		 LEN_H1DFP16;
SQLINTEGER    LEN_H1DFP34;

SQLCHAR       H1CHAR[100];
decNumber_t   tempDecNum;


/* Bind DECFLOAT(16) column */
rc = SQLBindCol( hstmt,
	     	     1,
		     SQL_C_DECIMAL64,
		     (SQLPOINTER)&H1DFP16,
		     sizeof(H1DFP16),
		     (SQLINTEGER *)&LEN_H1DFP16);

/* Bind DECFLOAT(34) column */
rc = SQLBindCol( hstmt,
	           1,
		     SQL_C_DECIMAL128,
		     (SQLPOINTER)&H1DFP34,
		     sizeof(H1DFP34),
		     (SQLINTEGER *)&LEN_H1DFP34);

rc = SQLFetch( hstmt );

/* Convert H1DFP16 to a character string for display */
decimal64ToString( (decimal64_t *)&H1DFP16, (char *)H1CHAR );

/* Convert H1DFP34 to decNumber form in preparation for arithmetic or other operations */
decimal128ToNumber( (decimal128_t *)&H1DFP34, &tempDecNum);